Bagikan melalui


Panduan: Pengembangan pengujian lebih dulu dengan fitur Dibuat Dari Penggunaan

Topik ini menunjukkan cara menggunakan fitur Generate From Usage yang mendukung pengembangan test-first.

Pengembangan test-first adalah pendekatan untuk desain perangkat lunak di mana Anda pertama kali menulis pengujian unit berdasarkan spesifikasi produk, dan kemudian menulis kode sumber yang diperlukan untuk membuat pengujian berhasil. Visual Studio mendukung pengembangan berbasis pengujian dengan membuat tipe dan anggota baru dalam kode sumber saat Anda pertama kali mereferensikannya dalam kasus pengujian Anda, sebelum mereka ditentukan.

Visual Studio menghasilkan jenis dan anggota baru dengan gangguan minimal pada alur kerja Anda. Anda dapat membuat stub untuk jenis, metode, properti, bidang, atau konstruktor tanpa meninggalkan lokasi Anda saat ini dalam kode. Saat Anda membuka kotak dialog untuk menentukan opsi untuk pembuatan jenis, fokus akan segera kembali ke file yang terbuka saat ini saat kotak dialog ditutup.

Fitur Generate From Usage dapat digunakan dengan kerangka kerja pengujian yang terintegrasi dengan Visual Studio. Dalam topik ini, Microsoft Unit Testing Framework ditunjukkan.

Nota

Instruksi dalam artikel ini menggambarkan versi terbaru dari pengalaman pengembangan interaktif (IDE) yang tersedia di Visual Studio. Komputer Anda mungkin menampilkan nama atau lokasi yang berbeda untuk beberapa elemen antarmuka pengguna. Anda mungkin menggunakan versi Visual Studio yang berbeda atau pengaturan lingkungan yang berbeda. Untuk informasi selengkapnya, lihat Mempersonalisasi ide.

Membuat proyek Pustaka Kelas Windows dan proyek Pengujian

  1. Di C# atau Visual Basic, buat proyek Pustaka Kelas Windows baru. Beri nama GFUDemo_VB atau GFUDemo_CS, tergantung pada bahasa mana yang Anda gunakan.

  2. Di Penjelajah Solusi, klik kanan ikon solusi di bagian atas, pilih Tambahkan>Proyek Baru.

  3. Buat proyek Unit Test Project (.NET Framework) baru.

Menambahkan referensi ke proyek Pustaka Kelas

  1. Di Penjelajah Solusi, di bawah proyek pengujian unit Anda, klik kanan entri Referensi dan pilih Tambahkan Referensi.

  2. Dalam kotak dialog Manajer Referensi , pilih Proyek lalu pilih proyek pustaka kelas.

  3. Pilih OK untuk menutup kotak dialog Manajer Referensi .

  4. Simpan solusi Anda. Anda sekarang siap untuk mulai menulis tes.

Hasilkan kelas baru dari pengujian unit

  1. Proyek pengujian berisi file yang bernama UnitTest1. Klik dua kali file ini di Penjelajah Solusi untuk membukanya di editor kode. Kelas pengujian dan metode pengujian telah dihasilkan.

  2. Temukan deklarasi untuk kelas UnitTest1 dan ganti namanya menjadi AutomobileTest.

    Nota

    IntelliSense sekarang menyediakan dua alternatif untuk penyelesaian pernyataan IntelliSense: mode penyelesaian dan mode saran. Gunakan mode saran untuk situasi di mana kelas dan anggota digunakan sebelum ditentukan. Saat jendela IntelliSense terbuka, Anda dapat menekan Ctrl+Alt+Space untuk beralih antara mode penyelesaian dan mode saran. Lihat Menggunakan IntelliSense untuk informasi selengkapnya. Mode saran akan membantu saat Anda mengetik Automobile di langkah berikutnya.

  3. TestMethod1() Temukan metode dan ganti namanya menjadi DefaultAutomobileIsInitializedCorrectly(). Di dalam metode ini, buat instans baru kelas bernama Automobile, seperti yang ditunjukkan pada cuplikan layar berikut. Garis bawah bergelombang muncul, yang menunjukkan kesalahan waktu kompilasi, dan ikon bola lampu kesalahan Tindakan Cepat muncul di margin kiri, atau tepat di bawah garis bergelombang jika Anda mengarahkannya.

    Tindakan Cepat di Visual Basic

    Tindakan Cepat di C#

  4. Pilih atau klik bola lampu Tindakan Cepat . Anda akan melihat pesan kesalahan yang menyatakan bahwa jenis Automobile tidak ditentukan. Anda juga disajikan dengan beberapa solusi.

  5. Klik Buat jenis baru untuk membuka kotak dialog Buat Tipe . Kotak dialog ini menyediakan opsi yang mencakup pembuatan jenis dalam proyek yang berbeda.

  6. Di daftar Proyek , klik GFUDemo_VB atau GFUDemo_CS untuk menginstruksikan Visual Studio untuk menambahkan file ke proyek pustaka kelas, bukan proyek pengujian. Jika belum dipilih, pilih Buat file baru dan beri nama Automobile.cs atau Automobile.vb.

    Kotak dialog Buat Tipe Baru

  7. Klik OK untuk menutup kotak dialog dan membuat file baru.

  8. Di Penjelajah Solusi, lihat di bawah simpul proyek GFUDemo_VB atau GFUDemo_CS untuk memverifikasi bahwa file Automobile.vb atau Automobile.cs baru ada di sana. Di editor kode, fokus masih ada di AutomobileTest.DefaultAutomobileIsInitializedCorrectly, yang memungkinkan Anda untuk terus menulis pengujian Anda dengan minimal gangguan.

Membuat stub properti

Asumsikan bahwa spesifikasi produk menyatakan bahwa Automobile kelas memiliki dua properti publik bernama Model dan TopSpeed. Properti ini harus diinisialisasi dengan nilai default "Not specified" dan -1 oleh konstruktor default. Pengujian unit berikut akan memverifikasi bahwa konstruktor default mengatur properti ke nilai default yang benar.

  1. Tambahkan baris kode berikut ke DefaultAutomobileIsInitializedCorrectly metode pengujian.

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. Karena kode mereferensikan dua properti yang tidak ditentukan pada Automobile, garis bawah bergelombang muncul di bawah Model dan TopSpeed. Arahkan mouse ke atas Model dan pilih lampu kesalahan Tindakan Cepat, lalu pilih Hasilkan properti 'Automobile.Model'.

  3. Hasilkan stub untuk properti TopSpeed dengan cara yang sama.

    Di kelas Automobile, jenis-jenis properti baru disimpulkan dengan benar dari konteks.

Membuat stub untuk konstruktor baru

Sekarang kita akan membuat metode pengujian yang akan menghasilkan stub konstruktor untuk menginisialisasi properti Model dan TopSpeed. Nantinya, Anda akan menambahkan lebih banyak kode untuk menyelesaikan pengujian.

  1. Tambahkan metode pengujian tambahan berikut ke kelas Anda AutomobileTest .

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Klik lampu peringatan kesalahan Tindakan Cepat di bawah garis bergelombang merah, lalu klik Hasilkan konstruktor dalam 'Automobile'.

    Automobile Dalam file kelas, perhatikan bahwa konstruktor baru telah memeriksa nama variabel lokal yang digunakan dalam panggilan konstruktor, menemukan properti yang memiliki nama yang sama di kelas Automobile, dan telah menyediakan kode dalam isi konstruktor untuk menyimpan nilai argumen di properti Model dan TopSpeed.

  3. Setelah Anda membuat konstruktor baru, garis bawah bergelombang akan muncul di bawah pemanggilan konstruktor default di DefaultAutomobileIsInitializedCorrectly. Pesan kesalahan menyatakan bahwa Automobile kelas tidak memiliki konstruktor yang tidak mengambil argumen nol. Untuk menghasilkan konstruktor default eksplisit yang tidak memiliki parameter, klik bola lampu kesalahan Tindakan Cepat, lalu klik Buat konstruktor di 'Automobile'.

Membuat stub untuk metode

Asumsikan bahwa spesifikasi menyatakan bahwa suatu Automobile baru dapat dimasukkan ke dalam status IsRunning jika propertinya Model dan TopSpeed diatur ke sesuatu selain nilai default.

  1. Tambahkan baris berikut ke AutomobileWithModelNameCanStart metode .

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Klik ikon kesalahan Tindakan Cepat pada panggilan metode dan kemudian klik Hasilkan metode 'Automobile.Start'.

  3. Klik bola lampu Tindakan Cepat pada properti IsRunning dan kemudian klik Buat properti 'Automobile.IsRunning'.

    Kelas Automobile sekarang berisi metode bernama Start() dan properti bernama IsRunning.

Jalankan pengujian

  1. Pada menu Uji , pilih Jalankan>Semua Pengujian.

    Perintah Jalankan>Semua Pengujian menjalankan semua pengujian dalam kerangka kerja pengujian apa pun yang ditulis untuk solusi saat ini. Dalam hal ini, ada dua tes, dan keduanya gagal, seperti yang diharapkan. Pengujian DefaultAutomobileIsInitializedCorrectly gagal karena Assert.IsTrue kondisi mengembalikan False. Pengujian AutomobileWithModelNameCanStart gagal karena Start metode di Automobile kelas melemparkan pengecualian.

    Jendela Hasil Pengujian ditampilkan dalam ilustrasi berikut.

    Hasil pengujian yang gagal

  2. Di jendela Hasil Pengujian , klik dua kali pada setiap baris hasil pengujian untuk masuk ke lokasi setiap pengujian.

Menerapkan kode sumber

  1. Tambahkan kode berikut ke konstruktor default sehingga properti Model, TopSpeed, dan IsRunning semuanya diinisialisasi ke nilai default yang benar dari "Not specified", -1, dan False (atau false untuk C#).

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Ketika metode Start dipanggil, harus mengatur flag IsRunning ke true hanya jika properti Model atau TopSpeed diatur ke sesuatu selain nilai defaultnya. NotImplementedException Hapus dari isi metode dan tambahkan kode berikut.

    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

Jalankan pengujian lagi

  • Pada menu Uji , arahkan ke Jalankan, lalu klik Semua Pengujian.

    Kali ini tes lulus. Jendela Hasil Pengujian ditampilkan dalam ilustrasi berikut.

    Hasil pengujian yang lulus