Bagikan melalui


Tutorial: Menguji pustaka kelas .NET menggunakan Visual Studio Code

Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.

Prasyarat

Membuat proyek pengujian unit

Pengujian unit menyediakan pengujian perangkat lunak otomatis selama pengembangan dan penerbitan Anda. Kerangka kerja pengujian yang Anda gunakan dalam tutorial ini adalah MSTest. MSTest adalah salah satu dari tiga kerangka kerja pengujian yang dapat Anda pilih. Yang lain adalah xUnit dan nUnit.

  1. Memulai Visual Studio Code.

  2. Buka solusi yang ClassLibraryProjects Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio Code.

  3. Buat proyek pengujian unit bernama "StringLibraryTest".

    dotnet new mstest -o StringLibraryTest
    

    Templat proyek membuat file UnitTest1.cs dengan kode berikut:

    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
        }
    }
    

    Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:

    Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dipanggil.

  4. Tambahkan proyek pengujian ke solusi.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Menambahkan referensi proyek

Agar proyek pengujian berfungsi dengan StringLibrary kelas , tambahkan referensi dalam StringLibraryTest proyek ke StringLibrary proyek.

  1. Jalankan perintah berikut:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
    

Menambahkan dan menjalankan metode pengujian unit

Saat Visual Studio memanggil pengujian unit, Visual Studio menjalankan setiap metode yang ditandai dengan TestMethodAttribute atribut di kelas yang ditandai dengan TestClassAttribute atribut . Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode telah berhasil.

Tes yang paling umum memanggil anggota Assert kelas. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Assert Beberapa metode kelas yang paling sering disebut ditampilkan dalam tabel berikut:

Metode pernyataan Fungsi
Assert.AreEqual Memverifikasi bahwa dua nilai atau objek sama. Pernyataan gagal jika nilai atau objek tidak sama.
Assert.AreSame Memverifikasi bahwa dua variabel objek merujuk ke objek yang sama. Pernyataan gagal jika variabel merujuk ke objek yang berbeda.
Assert.IsFalse Memverifikasi bahwa suatu kondisi adalah false. Pernyataan gagal jika kondisinya adalah true.
Assert.IsNotNull Memverifikasi bahwa objek bukan null. Pernyataan gagal jika objek adalah null.

Anda juga dapat menggunakan Assert.ThrowsException metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan untuk dilemparkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.

Dalam menguji StringLibrary.StartsWithUpper metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk kembali true dalam kasus ini, sehingga Anda dapat memanggil Assert.IsTrue metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk kembali false dalam kasus ini, sehingga Anda dapat memanggil Assert.IsFalse metode .

Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong (String.Empty) dan null string. String kosong adalah string yang tidak memiliki karakter dan yang Length 0. String null adalah string yang belum diinisialisasi. Anda dapat memanggil StartsWithUpper langsung sebagai metode statis dan meneruskan satu String argumen. Atau Anda dapat memanggil StartsWithUpper sebagai metode ekstensi pada variabel yang string ditetapkan ke null.

Anda akan menentukan tiga metode, yang masing-masing memanggil Assert metode untuk setiap elemen dalam array string. Anda akan memanggil kelebihan beban metode yang memungkinkan Anda menentukan pesan kesalahan yang akan ditampilkan jika terjadi kegagalan pengujian. Pesan mengidentifikasi string yang menyebabkan kegagalan.

Untuk membuat metode pengujian:

  1. Buka StringLibraryTest/UnitTest1.cs dan ganti semua kode dengan kode berikut.

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using UtilityLibraries;
    
    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestStartsWithUpper()
        {
            // Tests that we expect to return true.
            string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsTrue(result,
                       string.Format("Expected for '{0}': true; Actual: {1}",
                                     word, result));
            }
        }
    
        [TestMethod]
        public void TestDoesNotStartWithUpper()
        {
            // Tests that we expect to return false.
            string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                                   "1234", ".", ";", " " };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsFalse(result,
                       string.Format("Expected for '{0}': false; Actual: {1}",
                                     word, result));
            }
        }
    
        [TestMethod]
        public void DirectCallWithNullOrEmpty()
        {
            // Tests that we expect to return false.
            string?[] words = { string.Empty, null };
            foreach (var word in words)
            {
                bool result = StringLibrary.StartsWithUpper(word);
                Assert.IsFalse(result,
                       string.Format("Expected for '{0}': false; Actual: {1}",
                                     word == null ? "<null>" : word, result));
            }
        }
    }
    

    Pengujian karakter huruf besar dalam TestStartsWithUpper metode ini mencakup huruf kapital Yunani alfa (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalam TestDoesNotStartWithUpper metode ini mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).

  2. Simpan perubahan Anda.

  3. Jalankan pengujian:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Output terminal menunjukkan bahwa semua pengujian lulus.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
    
    Passed!  - Failed:     0, Passed:     3, Skipped:     0, Total:     3, Duration: 3 ms - StringLibraryTest.dll (net8.0)
    

Menangani kegagalan pengujian

Jika Anda melakukan pengembangan berbasis pengujian (TDD), Anda menulis pengujian terlebih dahulu dan mereka gagal saat pertama kali menjalankannya. Kemudian Anda menambahkan kode ke aplikasi yang membuat pengujian berhasil. Untuk tutorial ini, Anda membuat pengujian setelah menulis kode aplikasi yang divalidasinya, sehingga Anda belum melihat pengujian gagal. Untuk memvalidasi bahwa pengujian gagal ketika Anda mengharapkannya gagal, tambahkan nilai yang tidak valid ke input pengujian.

  1. words Ubah array dalam TestDoesNotStartWithUpper metode untuk menyertakan string "Kesalahan".

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Jalankan pengujian:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Output terminal menunjukkan bahwa satu pengujian gagal, dan memberikan pesan kesalahan untuk pengujian yang gagal: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
      Failed TestDoesNotStartWithUpper [28 ms]
      Error Message:
       Assert.IsFalse failed. Expected for 'Error': false; Actual: True
      Stack Trace:
         at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33
    
    Failed!  - Failed:     1, Passed:     2, Skipped:     0, Total:     3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
    
  3. Hapus string "Kesalahan" yang Anda tambahkan di langkah 1. Jalankan ulang tes dan tes lulus.

Menguji versi Rilis pustaka

Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian waktu tambahan terhadap build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.

  1. Jalankan pengujian dengan konfigurasi build Rilis:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Tes lulus.

Pengujian debug

Jika Anda menggunakan Visual Studio Code sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan di Men-debug aplikasi konsol .NET menggunakan Visual Studio Code untuk men-debug kode menggunakan proyek pengujian unit Anda. Alih-alih memulai proyek aplikasi ShowCase , buka StringLibraryTest/UnitTest1.cs, dan pilih Debug Semua Pengujian antara baris 7 dan 8. Jika Anda tidak dapat menemukannya, tekan Ctrl+Shift+P untuk membuka palet perintah dan masukkan Jendela Muat Ulang.

Visual Studio Code memulai proyek pengujian dengan debugger terlampir. Eksekusi akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.

Sumber Daya Tambahan:

Langkah berikutnya

Dalam tutorial ini, Anda unit menguji pustaka kelas. Anda dapat membuat pustaka tersedia untuk orang lain dengan menerbitkannya ke NuGet sebagai paket. Untuk mempelajari caranya, ikuti tutorial NuGet:

Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:

Pustaka tidak harus didistribusikan sebagai paket. Ini dapat dibundel dengan aplikasi konsol yang menggunakannya. Untuk mempelajari cara menerbitkan aplikasi konsol, lihat tutorial sebelumnya dalam seri ini:

Ekstensi Visual Studio Code C# Dev Kit menyediakan lebih banyak alat untuk mengembangkan aplikasi dan pustaka C#:

Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.

Prasyarat

Membuat proyek pengujian unit

Pengujian unit menyediakan pengujian perangkat lunak otomatis selama pengembangan dan penerbitan Anda. Kerangka kerja pengujian yang Anda gunakan dalam tutorial ini adalah MSTest. MSTest adalah salah satu dari tiga kerangka kerja pengujian yang dapat Anda pilih. Yang lain adalah xUnit dan nUnit.

  1. Memulai Visual Studio Code.

  2. Buka solusi yang ClassLibraryProjects Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio Code.

  3. Buat proyek pengujian unit bernama "StringLibraryTest".

    dotnet new mstest -o StringLibraryTest
    

    Templat proyek membuat file UnitTest1.cs dengan kode berikut:

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    

    Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:

    Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dipanggil.

  4. Tambahkan proyek pengujian ke solusi.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Menambahkan referensi proyek

Agar proyek pengujian berfungsi dengan StringLibrary kelas , tambahkan referensi dalam StringLibraryTest proyek ke StringLibrary proyek.

  1. Jalankan perintah berikut:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
    

Menambahkan dan menjalankan metode pengujian unit

Saat Visual Studio memanggil pengujian unit, Visual Studio menjalankan setiap metode yang ditandai dengan TestMethodAttribute atribut di kelas yang ditandai dengan TestClassAttribute atribut . Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode telah berhasil.

Tes yang paling umum memanggil anggota Assert kelas. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Assert Beberapa metode kelas yang paling sering disebut ditampilkan dalam tabel berikut:

Metode pernyataan Fungsi
Assert.AreEqual Memverifikasi bahwa dua nilai atau objek sama. Pernyataan gagal jika nilai atau objek tidak sama.
Assert.AreSame Memverifikasi bahwa dua variabel objek merujuk ke objek yang sama. Pernyataan gagal jika variabel merujuk ke objek yang berbeda.
Assert.IsFalse Memverifikasi bahwa suatu kondisi adalah false. Pernyataan gagal jika kondisinya adalah true.
Assert.IsNotNull Memverifikasi bahwa objek bukan null. Pernyataan gagal jika objek adalah null.

Anda juga dapat menggunakan Assert.ThrowsException metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan untuk dilemparkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.

Dalam menguji StringLibrary.StartsWithUpper metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk kembali true dalam kasus ini, sehingga Anda dapat memanggil Assert.IsTrue metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk kembali false dalam kasus ini, sehingga Anda dapat memanggil Assert.IsFalse metode .

Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong (String.Empty) dan null string. String kosong adalah string yang tidak memiliki karakter dan yang Length 0. String null adalah string yang belum diinisialisasi. Anda dapat memanggil StartsWithUpper langsung sebagai metode statis dan meneruskan satu String argumen. Atau Anda dapat memanggil StartsWithUpper sebagai metode ekstensi pada variabel yang string ditetapkan ke null.

Anda akan menentukan tiga metode, yang masing-masing memanggil Assert metode untuk setiap elemen dalam array string. Anda akan memanggil kelebihan beban metode yang memungkinkan Anda menentukan pesan kesalahan yang akan ditampilkan jika terjadi kegagalan pengujian. Pesan mengidentifikasi string yang menyebabkan kegagalan.

Untuk membuat metode pengujian:

  1. Buka StringLibraryTest/UnitTest1.cs dan ganti semua kode dengan kode berikut.

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using UtilityLibraries;
    
    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestStartsWithUpper()
        {
            // Tests that we expect to return true.
            string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsTrue(result,
                       string.Format("Expected for '{0}': true; Actual: {1}",
                                     word, result));
            }
        }
    
        [TestMethod]
        public void TestDoesNotStartWithUpper()
        {
            // Tests that we expect to return false.
            string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                                   "1234", ".", ";", " " };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsFalse(result,
                       string.Format("Expected for '{0}': false; Actual: {1}",
                                     word, result));
            }
        }
    
        [TestMethod]
        public void DirectCallWithNullOrEmpty()
        {
            // Tests that we expect to return false.
            string?[] words = { string.Empty, null };
            foreach (var word in words)
            {
                bool result = StringLibrary.StartsWithUpper(word);
                Assert.IsFalse(result,
                       string.Format("Expected for '{0}': false; Actual: {1}",
                                     word == null ? "<null>" : word, result));
            }
        }
    }
    

    Pengujian karakter huruf besar dalam TestStartsWithUpper metode ini mencakup huruf kapital Yunani alfa (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalam TestDoesNotStartWithUpper metode ini mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).

  2. Simpan perubahan Anda.

  3. Jalankan pengujian:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Output terminal menunjukkan bahwa semua pengujian lulus.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
    
    Passed!  - Failed:     0, Passed:     3, Skipped:     0, Total:     3, Duration: 3 ms - StringLibraryTest.dll (net7.0)
    

Menangani kegagalan pengujian

Jika Anda melakukan pengembangan berbasis pengujian (TDD), Anda menulis pengujian terlebih dahulu dan mereka gagal saat pertama kali menjalankannya. Kemudian Anda menambahkan kode ke aplikasi yang membuat pengujian berhasil. Untuk tutorial ini, Anda membuat pengujian setelah menulis kode aplikasi yang divalidasinya, sehingga Anda belum melihat pengujian gagal. Untuk memvalidasi bahwa pengujian gagal ketika Anda mengharapkannya gagal, tambahkan nilai yang tidak valid ke input pengujian.

  1. words Ubah array dalam TestDoesNotStartWithUpper metode untuk menyertakan string "Kesalahan".

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Jalankan pengujian:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Output terminal menunjukkan bahwa satu pengujian gagal, dan memberikan pesan kesalahan untuk pengujian yang gagal: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
      Failed TestDoesNotStartWithUpper [28 ms]
      Error Message:
       Assert.IsFalse failed. Expected for 'Error': false; Actual: True
      Stack Trace:
         at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33
    
    Failed!  - Failed:     1, Passed:     2, Skipped:     0, Total:     3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
    
  3. Hapus string "Kesalahan" yang Anda tambahkan di langkah 1. Jalankan ulang tes dan tes lulus.

Menguji versi Rilis pustaka

Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian waktu tambahan terhadap build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.

  1. Jalankan pengujian dengan konfigurasi build Rilis:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Tes lulus.

Pengujian debug

Jika Anda menggunakan Visual Studio Code sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan di Men-debug aplikasi konsol .NET menggunakan Visual Studio Code untuk men-debug kode menggunakan proyek pengujian unit Anda. Alih-alih memulai proyek aplikasi ShowCase , buka StringLibraryTest/UnitTest1.cs, dan pilih Debug Semua Pengujian antara baris 7 dan 8. Jika Anda tidak dapat menemukannya, tekan Ctrl+Shift+P untuk membuka palet perintah dan masukkan Jendela Muat Ulang.

Visual Studio Code memulai proyek pengujian dengan debugger terlampir. Eksekusi akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.

Sumber Daya Tambahan:

Langkah berikutnya

Dalam tutorial ini, Anda unit menguji pustaka kelas. Anda dapat membuat pustaka tersedia untuk orang lain dengan menerbitkannya ke NuGet sebagai paket. Untuk mempelajari caranya, ikuti tutorial NuGet:

Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:

Pustaka tidak harus didistribusikan sebagai paket. Ini dapat dibundel dengan aplikasi konsol yang menggunakannya. Untuk mempelajari cara menerbitkan aplikasi konsol, lihat tutorial sebelumnya dalam seri ini:

Tutorial ini menunjukkan cara mengotomatiskan pengujian unit dengan menambahkan proyek pengujian ke solusi.

Prasyarat

Membuat proyek pengujian unit

Pengujian unit menyediakan pengujian perangkat lunak otomatis selama pengembangan dan penerbitan Anda. Kerangka kerja pengujian yang Anda gunakan dalam tutorial ini adalah MSTest. MSTest adalah salah satu dari tiga kerangka kerja pengujian yang dapat Anda pilih. Yang lain adalah xUnit dan nUnit.

  1. Memulai Visual Studio Code.

  2. Buka solusi yang ClassLibraryProjects Anda buat di Membuat pustaka kelas .NET menggunakan Visual Studio Code.

  3. Buat proyek pengujian unit bernama "StringLibraryTest".

    dotnet new mstest -f net6.0 -o StringLibraryTest
    

    Perintah -f net6.0 mengubah kerangka kerja target default ke net6.0 versi.

    Perintah -o atau --output menentukan lokasi untuk menempatkan output yang dihasilkan.

    Templat proyek membuat file UnitTest1.cs dengan kode berikut:

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    

    Kode sumber yang dibuat oleh templat pengujian unit melakukan hal berikut:

    Setiap metode yang ditandai dengan [TestMethod] dalam kelas pengujian yang ditandai dengan [TestClass] dijalankan secara otomatis saat pengujian unit dipanggil.

  4. Tambahkan proyek pengujian ke solusi.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Menambahkan referensi proyek

Agar proyek pengujian berfungsi dengan StringLibrary kelas , tambahkan referensi dalam StringLibraryTest proyek ke StringLibrary proyek.

  1. Jalankan perintah berikut:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
    

Menambahkan dan menjalankan metode pengujian unit

Saat Visual Studio memanggil pengujian unit, Visual Studio menjalankan setiap metode yang ditandai dengan TestMethodAttribute atribut di kelas yang ditandai dengan TestClassAttribute atribut . Metode pengujian berakhir ketika kegagalan pertama ditemukan atau ketika semua pengujian yang terkandung dalam metode telah berhasil.

Tes yang paling umum memanggil anggota Assert kelas. Banyak metode pernyataan mencakup setidaknya dua parameter, salah satunya adalah hasil pengujian yang diharapkan dan yang lainnya adalah hasil pengujian aktual. Assert Beberapa metode kelas yang paling sering disebut ditampilkan dalam tabel berikut:

Metode pernyataan Fungsi
Assert.AreEqual Memverifikasi bahwa dua nilai atau objek sama. Pernyataan gagal jika nilai atau objek tidak sama.
Assert.AreSame Memverifikasi bahwa dua variabel objek merujuk ke objek yang sama. Pernyataan gagal jika variabel merujuk ke objek yang berbeda.
Assert.IsFalse Memverifikasi bahwa suatu kondisi adalah false. Pernyataan gagal jika kondisinya adalah true.
Assert.IsNotNull Memverifikasi bahwa objek bukan null. Pernyataan gagal jika objek adalah null.

Anda juga dapat menggunakan Assert.ThrowsException metode dalam metode pengujian untuk menunjukkan jenis pengecualian yang diharapkan untuk dilemparkan. Pengujian gagal jika pengecualian yang ditentukan tidak dilemparkan.

Dalam menguji StringLibrary.StartsWithUpper metode , Anda ingin menyediakan sejumlah string yang dimulai dengan karakter huruf besar. Anda mengharapkan metode untuk kembali true dalam kasus ini, sehingga Anda dapat memanggil Assert.IsTrue metode . Demikian pula, Anda ingin menyediakan sejumlah string yang dimulai dengan sesuatu selain karakter huruf besar. Anda mengharapkan metode untuk kembali false dalam kasus ini, sehingga Anda dapat memanggil Assert.IsFalse metode .

Karena metode pustaka Anda menangani string, Anda juga ingin memastikan bahwa metode tersebut berhasil menangani string kosong (String.Empty) dan null string. String kosong adalah string yang tidak memiliki karakter dan yang Length 0. String null adalah string yang belum diinisialisasi. Anda dapat memanggil StartsWithUpper langsung sebagai metode statis dan meneruskan satu String argumen. Atau Anda dapat memanggil StartsWithUpper sebagai metode ekstensi pada variabel yang string ditetapkan ke null.

Anda akan menentukan tiga metode, yang masing-masing memanggil Assert metode untuk setiap elemen dalam array string. Anda akan memanggil kelebihan beban metode yang memungkinkan Anda menentukan pesan kesalahan yang akan ditampilkan jika terjadi kegagalan pengujian. Pesan mengidentifikasi string yang menyebabkan kegagalan.

Untuk membuat metode pengujian:

  1. Buka StringLibraryTest/UnitTest1.cs dan ganti semua kode dengan kode berikut.

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using UtilityLibraries;
    
    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestStartsWithUpper()
        {
            // Tests that we expect to return true.
            string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsTrue(result,
                       string.Format("Expected for '{0}': true; Actual: {1}",
                                     word, result));
            }
        }
    
        [TestMethod]
        public void TestDoesNotStartWithUpper()
        {
            // Tests that we expect to return false.
            string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                                   "1234", ".", ";", " " };
            foreach (var word in words)
            {
                bool result = word.StartsWithUpper();
                Assert.IsFalse(result,
                       string.Format("Expected for '{0}': false; Actual: {1}",
                                     word, result));
            }
        }
    
        [TestMethod]
        public void DirectCallWithNullOrEmpty()
        {
            // Tests that we expect to return false.
            string?[] words = { string.Empty, null };
            foreach (var word in words)
            {
                bool result = StringLibrary.StartsWithUpper(word);
                Assert.IsFalse(result,
                       string.Format("Expected for '{0}': false; Actual: {1}",
                                     word == null ? "<null>" : word, result));
            }
        }
    }
    

    Pengujian karakter huruf besar dalam TestStartsWithUpper metode ini mencakup huruf kapital Yunani alfa (U+0391) dan huruf kapital Sirilik EM (U+041C). Pengujian karakter huruf kecil dalam TestDoesNotStartWithUpper metode ini mencakup alfa huruf kecil Yunani (U+03B1) dan huruf kecil Sirilik Ghe (U+0433).

  2. Simpan perubahan Anda.

  3. Jalankan pengujian:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Output terminal menunjukkan bahwa semua pengujian lulus.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
    
    Passed!  - Failed:     0, Passed:     3, Skipped:     0, Total:     3, Duration: 3 ms - StringLibraryTest.dll (net6.0)
    

Menangani kegagalan pengujian

Jika Anda melakukan pengembangan berbasis pengujian (TDD), Anda menulis pengujian terlebih dahulu dan mereka gagal saat pertama kali menjalankannya. Kemudian Anda menambahkan kode ke aplikasi yang membuat pengujian berhasil. Untuk tutorial ini, Anda membuat pengujian setelah menulis kode aplikasi yang divalidasinya, sehingga Anda belum melihat pengujian gagal. Untuk memvalidasi bahwa pengujian gagal ketika Anda mengharapkannya gagal, tambahkan nilai yang tidak valid ke input pengujian.

  1. words Ubah array dalam TestDoesNotStartWithUpper metode untuk menyertakan string "Kesalahan".

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Jalankan pengujian:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Output terminal menunjukkan bahwa satu pengujian gagal, dan memberikan pesan kesalahan untuk pengujian yang gagal: "Assert.IsFalse gagal. Diharapkan untuk 'Kesalahan': false; aktual: Benar". Karena kegagalan, tidak ada string dalam array setelah "Kesalahan" diuji.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
      Failed TestDoesNotStartWithUpper [28 ms]
      Error Message:
       Assert.IsFalse failed. Expected for 'Error': false; Actual: True
      Stack Trace:
         at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33
    
    Failed!  - Failed:     1, Passed:     2, Skipped:     0, Total:     3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
    
  3. Hapus string "Kesalahan" yang Anda tambahkan di langkah 1. Jalankan ulang tes dan tes lulus.

Menguji versi Rilis pustaka

Sekarang setelah semua pengujian lulus saat menjalankan build Debug pustaka, jalankan pengujian waktu tambahan terhadap build Rilis pustaka. Sejumlah faktor, termasuk pengoptimalan pengkompilasi, terkadang dapat menghasilkan perilaku yang berbeda antara build Debug dan Rilis.

  1. Jalankan pengujian dengan konfigurasi build Rilis:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Tes lulus.

Pengujian debug

Jika Anda menggunakan Visual Studio Code sebagai IDE, Anda dapat menggunakan proses yang sama yang ditampilkan di Men-debug aplikasi konsol .NET menggunakan Visual Studio Code untuk men-debug kode menggunakan proyek pengujian unit Anda. Alih-alih memulai proyek aplikasi ShowCase , buka StringLibraryTest/UnitTest1.cs, dan pilih Debug Semua Pengujian antara baris 7 dan 8. Jika Anda tidak dapat menemukannya, tekan Ctrl+Shift+P untuk membuka palet perintah dan masukkan Jendela Muat Ulang.

Visual Studio Code memulai proyek pengujian dengan debugger terlampir. Eksekusi akan berhenti pada titik henti apa pun yang telah Anda tambahkan ke proyek pengujian atau kode pustaka yang mendasar.

Sumber Daya Tambahan:

Langkah berikutnya

Dalam tutorial ini, Anda unit menguji pustaka kelas. Anda dapat membuat pustaka tersedia untuk orang lain dengan menerbitkannya ke NuGet sebagai paket. Untuk mempelajari caranya, ikuti tutorial NuGet:

Jika Anda menerbitkan pustaka sebagai paket NuGet, orang lain dapat menginstal dan menggunakannya. Untuk mempelajari caranya, ikuti tutorial NuGet:

Pustaka tidak harus didistribusikan sebagai paket. Ini dapat dibundel dengan aplikasi konsol yang menggunakannya. Untuk mempelajari cara menerbitkan aplikasi konsol, lihat tutorial sebelumnya dalam seri ini: