Bagikan melalui


Pengujian Penulisan di C#

Contoh di bawah ini menunjukkan file C# .cs dengan kelas pengujian tunggal sederhana yang menunjukkan markup pengujian C#. (Harap dicatat bahwa contoh ini hanya untuk tujuan demonstrasi, sehingga tidak akan mengkompilasi atau menjalankan.)

1    using Microsoft.VisualStudio.TestTools.UnitTesting;
2    using System;
3    using System.Collections;
4    using WEX.Logging.Interop;
5    using WEX.TestExecution;
6
7    [TestClass]
8    public class ManagedStartMenuTests
9    {
10       [AssemblyInitialize]
11       [TestProperty("Component", "Navigation")]
12       [TestProperty("SubComponent", "StartMenu")]
13       public static void RunModuleSetup(Object context)
14       {
15           defaultPolicy = SetObjectFactoryPolicy(PolicyClassic);
16       }
17
18       [AssemblyCleanup]
19       public static void RunModuleCleanup()
20       {
21           SetObjectFactoryPolicy(defaultPolicy);
22       }
23
24       [ClassInitialize]
25       [TestProperty("TeamOwner", "WEX")]
26       [TestProperty("GroupOwner", "MediaPlayerTest")]
27       public static void TestClassSetup(Object testContext)
28       {
29           objectFactory = new ObjectFactory();
30       }
31
32       [ClassCleanup]
33       public static void TestClassCleanup()
34       {
35           objectFactory.Dispose();
36       }
37
38       [TestInitialize]
39       public void TestMethodSetup()
40       {
41           startMenuObject = objectFactory.CreateObject();
42       }
43
44       [TestCleanup]
45       public void TestMethodCleanup()
46       {
47           startMenuObject.Dispose();
48       }
49
50
51       [TestMethod]
52       [Owner("Someone")]
53       [Priority(0)]
54       public void TestMethod1()
55       {
56           Verify.AreEqual(startMenuObject.size, expectedObjectSize);
57       }
58   }

Untuk mendeklarasikan pengujian c#, TAEF menggunakan markup pengujian VSTS.

Untuk mendeklarasikan kelas pengujian di C#, Anda menggunakan atribut [TestClass] pada kelas C# biasa (Baris 7) dan untuk deklarasi metode pengujian, gunakan atribut [TestMethod] pada metode kelas biasa (Baris 51).

Markup pengujian C# juga mendukung berbagai metode penyiapan dan pembersihan.

Metode statis dengan set atribut [AssemblyInitialize] berjalan sebelum metode kelas lain dan melakukan inisialisasi tingkat perakitan (Baris 10) . Akibatnya, ada metode pembersihan perakitan, metode statis dengan set atribut [AssemblyCleanup] yang berjalan setelah semua metode lain selesai (Baris 18).

Demikian pula, ada kelas dan metode penyiapan dan pembersihan pengujian. (lihat baris 24, 32, 38, 44) Tidak seperti di C++, metode penyiapan dan pembersihan kelas dalam kode terkelola harus statis.

Markup pengujian TAEF C# mendukung properti pengujian, kelas, dan modul.

Untuk mengatur properti modul, atur atribut pada penginisialisasi rakitan (lihat baris 11 dan 12). Demikian pula untuk mengatur properti tingkat kelas, atur properti pada penginisialisasi kelas (lihat baris 25 dan 26). Untuk properti tingkat metode pengujian, cukup terapkan properti ke metode pengujian tertentu. (lihat baris 52 dan 53)

Berjalan di bawah VSTS

Catatan: untuk mengurangi dependensi pada biner VSTS, saat ini metode penyiapan Kelas dan Perakitan mengambil Objek sebagai parameter pertama.

Jika Anda ingin menjalankan pengujian dari VSTS, ubah jenis Objek tersebut menjadi jenis TestContext . Perlu diingat bahwa ini akan menambahkan dependensi pada microsoft.visualstudio.qualitytools.unittestframework.dll dan microsoft.visualstudio.qualitytools.resource.dll.

Langkah-langkahnya sedikit berbeda saat berjalan di bawah VSTS. Anda perlu menyiapkan pengaturan Eksekusi Uji Lokal untuk menyalin dependensi yang tidak dikelola. Untuk melakukan ini, buka:

  • Uji-Edit> Uji Coba Konfigurasi-Eksekusi> Pengujian Lokal
  • Klik Penyebaran.Masukkan dll yang perlu Anda salin untuk setiap pengujian:
    • Wex.Logger.dll
    • Wex.Common.dll
    • Wex.Common.Managed.dll
    • Wex.Communication.dll
    • Wex.Logger.Interop.dll

Ini diperlukan karena fakta bahwa VSTS membuat direktori baru dan menyalin file setiap kali menjalankan kasus pengujian Anda. Anda dapat melihat direktori ini di komputer Anda sebagai folder saudara ke folder proyek Anda.

Menjalankan pengujian terkelola di domain aplikasi default

Secara default, untuk isolasi kode pengujian, TAEF menjalankan pengujian terkelola di domain aplikasi pengujian khusus. Namun, saat menggunakan domain aplikasi non-default, skenario di mana kode asli memanggil ke dalam kode terkelola (misalnya fungsi panggilan balik asli yang digunakan oleh kode terkelola) dapat menyebabkan kesalahan dengan pesan: "Tidak dapat meneruskan GCHandle di seluruh AppDomains". Untuk skenario ini, paksa pengujian terkelola untuk dijalankan di domain aplikasi default dengan menggunakan sakelar /defaultAppDomain .

Perhatikan bahwa menjalankan pengujian terkelola di domain aplikasi default tidak kompatibel dengan Assembly Config Files.

Dukungan untuk metode pengujian asinkron

Biner NetFX 4.5 TAEF mendukung eksekusi metode pengujian TAEF asinkron. Ini berarti bahwa pengujian TAEF yang ditandai dengan kata kunci asinkron dapat menunggu operasi asinkron .

Catatan Jangan mencoba memanfaatkan fungsionalitas ini dengan biner NetFX 2.0/3.5 TAEF; hanya biner NetFX 4.5 yang mendukung fitur ini.

TAEF mendukung metode pengujian tugas asinkron dan asinkron (keduanya akan menghasilkan fungsionalitas yang sama):

[TestMethod]
public async Task MyAsyncTest()
{
    await AsyncAPICall1();
    var result = await AsyncAPICall2();
    Verify.IsTrue(result);
}

Atau:

[TestMethod]
public async void MyAsyncTest2()
{
    await AsyncAPICall1();
    var result = await AsyncAPICall2();
    Verify.IsTrue(result);
}