Memulai proyek baru dengan TDD


10

Saya sedang mempelajari TDD dan saya membaca bahwa itu juga membantu Anda menentukan desain aplikasi, benar?

Jadi saya memutuskan untuk mulai membuat proyek baru untuk membantu saya memahaminya dengan lebih baik.

Saya ingin membuat sistem pendaftaran pengguna sederhana yang akan menanyakan nama, alamat email, negara (akan memilih satu dari daftar) dan nomor telepon.

Jadi pertanyaannya adalah ...

Saya menciptakan solusi baru di VS 2010, menambahkan proyek Uji baru dan saya tidak tahu tes apa yang harus ditulis!

Karena itu akan membantu saya menentukan desain, tes apa yang bisa saya tulis di sini?

Terima kasih atas bantuannya!

c#  .net  tdd 

1
Ini akan membantu Anda dengan cara yang pertama kali Anda harus pikirkan tentang pola yang akan Anda gunakan, kelas yang akan Anda tulis, dll. - Mulailah dengan mendefinisikan kelas dan menulis kasus uji untuk metode, kemudian mulai menerapkan metode sesuai dengan test case mereka ..
halfdan

Jawaban:


6

Saat Anda menulis tes unit, Anda sedang menguji perilaku aplikasi Anda sehingga pertanyaan penting untuk ditanyakan adalah apa yang dilakukan aplikasi Anda ? Inilah awalnya:

[TestFixture]
public class RegistrationTests
{
    [Test]
    public void Should_save_new_user_info()
    {
    }

    [Test]
    public void Should_throw_validation_exception_when_email_already_exists()
    {
    }

    [Test]
    public void Should_format_phone_number_when_country_code_is_us()
    {
    }
}

Nah, semua tes sudah lulus, bagaimana selanjutnya? :)
Scott Whitlock

2

Hanya membuat proyek uji dan menulis beberapa metode uji adalah semacam TDD, tetapi dalam pengalaman saya itu tidak banyak membantu kecuali Anda bekerja di perpustakaan di mana ada API yang dikenal dan panggilan metode berhubungan langsung dengan sesuatu yang diharapkan oleh pengguna . Anda perlu membuat daftar tes yang tepat, dan untuk aplikasi non-sepele, itu bisa sangat sulit dilakukan.

Saya sarankan mencoba SpecFlow - itu membuat tes mendefinisikan baik dipisahkan dari implementasi dan struktur file fitur memaksa Anda untuk berpikir tentang apa yang sebenarnya Anda uji.

Ketika Anda mendefinisikan fitur Anda hanya menulis sesuatu seperti

When a user is saved
Then the user should exist

Karena Anda tidak berada dalam file kode pada titik ini, Anda tidak tergoda untuk memikirkan detail implementasi seperti metode mana yang dipanggil untuk membuat pengguna atau bahkan kelas yang menerapkannya. Anda dapat menggunakan tag untuk memilih implementasi yang berbeda, jadi pada level ini tidak masalah apakah "pengguna diselamatkan" berarti panggilan ke CreateUser atau membuka browser dan mengirimkan formulir.

Setelah Anda memiliki fitur yang ditentukan, semua tes dihasilkan dan akan mulai lulus saat Anda menerapkan definisi langkah dan kode aplikasi yang sebenarnya sedang diuji.

Untuk aplikasi sederhana, Anda hanya dapat membuat file fitur, tetapi untuk hal yang lebih kompleks, berguna untuk menyatukan spesifikasi yang lebih lengkap sebelumnya. Saya menggunakan aplikasi pemetaan pikiran iPad untuk ini, tetapi Anda dapat menggunakan alat apa pun yang paling nyaman bagi Anda.

Mulailah dengan daftar fitur tingkat tinggi seperti "Registrasi pengguna". Ini cenderung terlalu luas untuk menulis tes secara langsung, jadi bagi mereka menjadi subfitur yang dapat didefinisikan dengan jelas dan umumnya dipetakan ke tindakan pengguna tertentu seperti "Simpan pengguna" atau "Lihat pengguna yang ada".

Masing-masing subfitur ini akan memerlukan daftar skenario yang bersama-sama sepenuhnya menentukan apakah fitur tersebut berfungsi, hal-hal seperti "Dapat menyimpan pengguna yang valid" dan "Tidak dapat menyimpan pengguna dengan nama pengguna duplikat".

Ketika Anda membangun daftar ini, umumnya akan menjadi jelas di mana struktur perlu disesuaikan - jika Anda tidak dapat membuat tes skenario untuk fitur, atau Anda berakhir dengan terlalu banyak dalam satu fitur maka fitur itu mungkin ditentukan pada level yang salah dan perlu dipisah atau diubah.


2

Saya merasa baik untuk mendukung percobaan pertama saya ke TDD dengan membaca dan memotong kode. The Artikel wikipedia pada subjek sangat baik dan akan membawa Anda berbagai sumber lainnya. Carilah hal-hal oleh Kent Beck khususnya - semacam bapak TDD.

Hal-hal lain yang mungkin dapat membantu Anda melakukannya adalah melakukan beberapa katas - sederhana, latihan latihan yang hampir tanpa pikiran. Roy Osherove punya beberapa yang bagus.

Di luar itu, perlu diingat ide-ide kunci TDD - tulis satu tes pada satu waktu dan jangan terus sampai itu dan semua tes sebelumnya lulus. Cukup tulis kode yang cukup untuk memenuhi tes saat ini, hindari godaan untuk menulis lebih banyak. Ketika Anda pergi, hentikan setiap sekarang dan lagi dan pikirkan apakah Anda dapat membersihkan kode atau tes. Selalu berkembang dalam siklus merah (gagal tes), hijau (lulus), siklus refactor.

Dan untuk memulai, mungkin mulai dengan persyaratan nama Anda. Apa yang akan Anda butuhkan?

Anda mungkin perlu kelas. Tulis tes untuk itu (beberapa orang lewati ini tetapi ketika mulai melakukannya untuk latihan) dan menulis kelas.

Selanjutnya kelas Anda perlu menyimpan nama. Tulis tes yang membuktikan bahwa kelas Anda memang bisa. Kemudian lagi tulis kode untuk lulus ujian.

Maka mungkin Anda memiliki beberapa aturan bisnis lagi. Mungkin Anda ingin nama Anda menjadi jumlah minimum karakter. Tulis tes, lihat gagal, tulis kode.

Dan seterusnya...


1

Saya pikir itu tidak mungkin untuk memberi Anda gagasan TDD dalam jawaban singkat. Anda perlu "melihat" sombody mempraktikkannya, untuk merasakannya. Sumber daya terbaik yang pernah saya temukan tentang topik itu adalah http://pragprog.com/titles/achbd/the-rspec-book . Sebelum Anda memberi tahu saya, Ruby itu bukan bahasa Anda: Baca kata pengantar oleh Paman Bob! ;-)


1
Buku rspec baik-baik saja. Jika OP akan membaca buku tentang TDD, ini harusnya: amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530
Julio

0

Anda mungkin ingin mengatur tes yang mencoba menambahkan beberapa nilai berbeda ke dalam bidang email, beberapa valid dan lainnya tidak. Jangan berhenti berkembang sampai semua tes memberikan nilai yang diharapkan. Hal-hal seperti itu.


0

Seperti yang telah Anda jelaskan sistemnya, hanya ada satu tes di level aplikasi:

[Test] public void Save_and_retrieve_user (Nama string, Email string, ...) {// Simpan // Ambil // Verifikasi}

Saat Anda memperbaiki persyaratan, tambahkan lebih banyak tes.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.