Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengujian berbasis data memungkinkan Anda menjalankan metode pengujian yang sama dengan beberapa set data input. Alih-alih menulis metode pengujian terpisah untuk setiap kasus pengujian, tentukan logika pengujian Anda sekali dan berikan input yang berbeda melalui atribut atau sumber data eksternal.
Gambaran Umum
MSTest menyediakan beberapa atribut untuk pengujian berbasis data:
| Attribute | Skenario penggunaan | Paling cocok untuk |
|---|---|---|
DataRow |
Data uji sebaris | Kasus pengujian statis sederhana |
CombinatorialData |
Produk Kartesius dari nilai parameter | Kombinasi menyeluruh dari input yang independen |
DynamicData |
Data dari metode, properti, atau bidang | Data pengujian kompleks atau komputasi |
DataSource |
File data eksternal atau basis data | Skenario lama dengan sumber data eksternal |
MSTest juga menyediakan jenis berikut untuk memperluas skenario berbasis data:
-
TestDataRow<T>: Jenis pengembalian untukITestDataSourceimplementasi (termasukDynamicData) yang menambahkan dukungan metadata seperti nama tampilan, kategori, dan mengabaikan pesan ke kasus pengujian individual. -
ITestDataSource: Antarmuka yang dapat Anda terapkan pada atribut kustom untuk membuat atribut sumber data kustom sepenuhnya.
Important
Pengujian combinatorial bawaan direncanakan untuk MSTest 4.4 dan hanya tersedia dalam build pratinjau hingga MSTest 4.4.0 dirilis. Untuk versi MSTest sebelumnya, gunakan paket Combinatorial.MSTest yang dikelola komunitas.
DataRowAttribute
DataRowAttribute memungkinkan Anda menjalankan metode pengujian yang sama dengan beberapa input berbeda. Terapkan satu atau beberapa DataRow atribut ke metode pengujian yang dihiasi dengan TestMethodAttribute.
Jumlah dan jenis argumen harus sama persis dengan tanda tangan metode pengujian.
Petunjuk / Saran
Penganalisis terkait:
-
MSTEST0014 memvalidasi bahwa
DataRowargumen cocok dengan tanda tangan metode pengujian. -
MSTEST0042 mendeteksi entri duplikat
DataRowyang akan menjalankan kasus pengujian yang sama beberapa kali.
Penggunaan dasar
[TestClass]
public class CalculatorTests
{
[TestMethod]
[DataRow(1, 2, 3)]
[DataRow(0, 0, 0)]
[DataRow(-1, 1, 0)]
[DataRow(100, 200, 300)]
public void Add_ReturnsCorrectSum(int a, int b, int expected)
{
var calculator = new Calculator();
Assert.AreEqual(expected, calculator.Add(a, b));
}
}
Jenis argumen yang didukung
DataRow mendukung berbagai jenis argumen termasuk primitif, string, array, dan nilai null:
[TestClass]
public class DataRowExamples
{
[TestMethod]
[DataRow(1, "message", true, 2.0)]
public void TestWithMixedTypes(int i, string s, bool b, float f)
{
// Test with different primitive types
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" })]
public void TestWithArray(string[] lines)
{
Assert.AreEqual(2, lines.Length);
}
[TestMethod]
[DataRow(null)]
public void TestWithNull(object o)
{
Assert.IsNull(o);
}
[TestMethod]
[DataRow(new string[] { "a", "b" }, new string[] { "c", "d" })]
public void TestWithMultipleArrays(string[] input, string[] expected)
{
// Starting with MSTest v3, two arrays don't need wrapping
}
}
Nota
Dimulai dengan MSTest v3.10, gunakan DateOnly dan TimeOnly sebagai DataRow argumen dan dalam DynamicData pengujian berparameter.
Menggunakan param untuk argumen variabel
params Gunakan kata kunci untuk menerima jumlah variabel argumen:
[TestClass]
public class ParamsExample
{
[TestMethod]
[DataRow(1, 2, 3, 4)]
[DataRow(10, 20)]
[DataRow(5)]
public void TestWithParams(params int[] values)
{
Assert.IsTrue(values.Length > 0);
}
}
Metode pengujian generik
Dimulai dengan MSTest v3.8, TestMethod dapat memiliki parameter jenis. Kerangka kerja menyimpulkan argumen jenis dari DataRow atau DynamicData nilai:
[TestMethod]
[DataRow(42)]
[DataRow("alpha")]
public void Value_RoundTrips<T>(T value)
{
Assert.AreEqual(value, value);
}
Nama tampilan kustom
Atur DisplayName properti untuk menyesuaikan bagaimana kasus pengujian muncul di Test Explorer:
[TestClass]
public class DisplayNameExample
{
[TestMethod]
[DataRow(1, 2, DisplayName = "Functional Case FC100.1")]
[DataRow(3, 4, DisplayName = "Edge case: small numbers")]
public void TestMethod(int i, int j)
{
Assert.IsTrue(i < j);
}
}
Petunjuk / Saran
Untuk kontrol lebih besar atas metadata pengujian, pertimbangkan untuk menggunakan TestDataRow<T> dengan DynamicData.
TestDataRow<T> mendukung nama tampilan bersama dengan kategori pengujian dan mengabaikan pesan untuk kasus pengujian individual.
Mengabaikan kasus pengujian tertentu
Dimulai dengan MSTest v3.8, gunakan IgnoreMessage properti untuk melewati baris data tertentu:
[TestClass]
public class IgnoreDataRowExample
{
[TestMethod]
[DataRow(1, 2)]
[DataRow(3, 4, IgnoreMessage = "Temporarily disabled - bug #123")]
[DataRow(5, 6)]
public void TestMethod(int i, int j)
{
// Only the first and third data rows run
// The second is skipped with the provided message
}
}
CombinatorialDataAttribute
Dalam build pratinjau MSTest 4.4, atribut CombinatorialData menghasilkan hasil kali Kartesius dari nilai tiap parameter metode pengujian. Gunakan tipe dalam namespace Microsoft.VisualStudio.TestTools.UnitTesting.Combinatorial.
Berikan nilai untuk setiap parameter dengan salah satu opsi berikut:
| Sumber nilai | Perilaku |
|---|---|
| Nilai yang disimpulkan | Menggunakan true dan false untuk bool; 0 dan 1 untuk int; semua nilai yang ditentukan untuk enumerasi; dan null ditambah nilai yang disimpulkan untuk versi yang dapat bernilai null dari salah satu tipe yang didukung ini. |
CombinatorialValues |
Menggunakan nilai eksplisit yang Anda berikan ke atribut . |
CombinatorialRange |
Menghasilkan nilai int atau uint dari nilai awal dan jumlah, atau dari titik akhir inklusif dan interval. |
CombinatorialRandomData |
Menghasilkan nilai unik int . Atur Count, Minimum, Maximum, dan secara Seed opsional untuk mengontrol nilai. |
Pengujian berikut menggabungkan dua nilai bool yang disimpulkan, dua nilai eksplisit, tiga nilai rentang, dan dua nilai acak berseed. MSTest menghasilkan 24 kasus pengujian dari kumpulan parameter independen ini.
[TestMethod]
[CombinatorialData]
public void Calculate_UsesEveryCombination(
bool enabled,
[CombinatorialValues(1, 3)] int factor,
[CombinatorialRange(2, 6, 2)] int value,
[CombinatorialRandomData(Count = 2, Minimum = 10, Maximum = 20, Seed = 42)] int offset)
{
int result = enabled ? (factor * value) + offset : value + offset;
Assert.IsTrue(result >= 12);
}
<TestMethod>
<CombinatorialData>
Public Sub Calculate_UsesEveryCombination(
enabled As Boolean,
<CombinatorialValues(1, 3)> factor As Integer,
<CombinatorialRange(2, 6, 2)> value As Integer,
<CombinatorialRandomData(Count:=2, Minimum:=10, Maximum:=20, Seed:=42)> offset As Integer)
Dim result = If(enabled, (factor * value) + offset, value + offset)
Assert.IsTrue(result >= 12)
End Sub
Terapkan tidak lebih dari satu penyedia nilai combinatorial ke setiap parameter. Untuk jenis parameter yang nilainya tidak dapat disimpulkan MSTest, terapkan CombinatorialValues, , CombinatorialRangeCombinatorialRandomData, atau atribut kustom yang mengimplementasikan ICombinatorialValuesProvider.
CombinatorialData menciptakan produk Kartesius yang lengkap. Ini tidak mendukung generasi berpasangan, permutasi, pengecualian antar nilai parameter, nilai yang didukung oleh anggota, atau data kelas. Gunakan DynamicData atau kustom ITestDataSource saat nilai bergantung satu sama lain atau saat Anda perlu memfilter kasus pengujian yang dihasilkan.
DynamicDataAttribute
Elemen ini memungkinkan DynamicDataAttribute Anda menyediakan data pengujian dari metode, properti, atau bidang. Gunakan atribut ini saat data pengujian kompleks, dihitung secara dinamis, atau terlalu verbose untuk atribut sebaris DataRow .
Jenis sumber data yang didukung
Sumber data dapat mengembalikan IEnumerable<T> mana saja ketika T adalah salah satu jenis yang tercantum dalam tabel berikut. Setiap koleksi yang mengimplementasikan IEnumerable<T> akan berfungsi, termasuk List<T>, array seperti T[], atau tipe koleksi khusus. Pilih berdasarkan kebutuhan Anda:
| Tipe pengembalian | Keamanan tipe | Dukungan metadata | Paling cocok untuk |
|---|---|---|---|
ValueTuple (misalnya, (int, string)) |
Waktu kompilasi | Tidak. | Sebagian besar skenario - sintaks sederhana dengan pemeriksaan jenis lengkap |
Tuple<...> |
Waktu kompilasi | Tidak. | Ketika Anda tidak dapat menggunakan ValueTuple |
TestDataRow<T> |
Waktu kompilasi | Yes | Kasus pengujian yang memerlukan nama tampilan, kategori, atau mengabaikan pesan |
object[] |
Hanya runtime | Tidak. | Kode warisan - hindari untuk pengujian baru |
Petunjuk / Saran
Untuk metode data pengujian baru, gunakan ValueTuple untuk kasus sederhana atau TestDataRow<T> saat Anda memerlukan metadata. Hindari object[] karena tidak memiliki pengecekan tipe pada saat kompilasi dan dapat menyebabkan kesalahan saat runtime akibat ketidakcocokan tipe.
Sumber data
Sumber data dapat berupa metode atau properti dan, mulai dari MSTest v3.11, bidang. Sumber-sumber ini dapat dipertukarkan, jadi pilih berdasarkan preferensi Anda:
Nota
Dimulai dengan MSTest v3.8, DynamicData mendeteksi jenis sumber data secara otomatis. Anda tidak perlu menentukan DynamicDataSourceType secara eksplisit.
[TestClass]
public class DynamicDataExample
{
// Method - best for computed or yielded data
public static IEnumerable<(int Value, string Name)> GetTestData()
{
yield return (1, "first");
yield return (2, "second");
}
// Property - concise for static data
public static IEnumerable<(int Value, string Name)> TestDataProperty =>
[
(1, "first"),
(2, "second")
];
// Field - simplest for static data
public static IEnumerable<(int Value, string Name)> TestDataField =
[
(1, "first"),
(2, "second")
];
[TestMethod]
[DynamicData(nameof(GetTestData))]
public void TestWithMethod(int value, string name)
{
Assert.IsTrue(value > 0);
}
[TestMethod]
[DynamicData(nameof(TestDataProperty))]
public void TestWithProperty(int value, string name)
{
Assert.IsTrue(value > 0);
}
[TestMethod]
[DynamicData(nameof(TestDataField))]
public void TestWithField(int value, string name)
{
Assert.IsTrue(value > 0);
}
}
Nota
Metode, properti, dan bidang sumber data harus berupa public static dan mengembalikan IEnumerable<T> jenis yang didukung.
Nota
Mulai MSTest v3.11, sumber data dapat berupa field. Versi sebelumnya mendukung metode dan properti.
Petunjuk / Saran
Penganalisis terkait: MSTEST0018 memvalidasi bahwa sumber data ada, dapat diakses, dan memiliki tanda tangan yang benar.
Sumber data dari kelas yang berbeda
Tentukan kelas yang berbeda menggunakan parameter jenis:
public class TestDataProvider
{
public static IEnumerable<(int, string)> GetTestData()
{
yield return (1, "first");
yield return (2, "second");
}
}
[TestClass]
public class DynamicDataExternalExample
{
[TestMethod]
[DynamicData(nameof(TestDataProvider.GetTestData), typeof(TestDataProvider))]
public void TestMethod(int value1, string value2)
{
Assert.IsTrue(value1 > 0);
}
}
Metode sumber berparameter DynamicData
Mulai dari MSTest v3.10, teruskan nilai ke metode sumber DynamicData dengan properti Arguments:
[TestMethod]
[DynamicData(nameof(GetValues), Arguments = new object[] { true })]
public void Value_IsPositive(int value, bool expected) => Assert.AreEqual(expected, value > 0);
public static IEnumerable<(int Value, bool Expected)> GetValues(bool includeZero) =>
includeZero ? [(1, true), (0, false)] : [(1, true)];
Nama tampilan kustom
Sesuaikan nama tampilan kasus pengujian menggunakan DynamicDataDisplayName properti :
using System.Reflection;
[TestClass]
public class DynamicDataDisplayNameExample
{
[TestMethod]
[DynamicData(nameof(GetTestData), DynamicDataDisplayName = nameof(GetDisplayName))]
public void TestMethod(int value1, string value2)
{
Assert.IsTrue(value1 > 0);
}
public static IEnumerable<(int, string)> GetTestData()
{
yield return (1, "first");
yield return (2, "second");
}
public static string GetDisplayName(MethodInfo methodInfo, object[] data)
{
return $"{methodInfo.Name} with value {data[0]} and '{data[1]}'";
}
}
Nota
Metode nama tampilan harus public static, mengembalikan string, dan menerima dua parameter: MethodInfo dan object[].
Petunjuk / Saran
Untuk pendekatan yang lebih sederhana untuk nama tampilan kustom, pertimbangkan untuk menggunakan TestDataRow<T> dengan propertinya DisplayName alih-alih metode terpisah.
Mengabaikan semua kasus pengujian dari sumber data
Dimulai dengan MSTest v3.8, gunakan IgnoreMessage untuk melewati semua kasus pengujian:
[TestClass]
public class IgnoreDynamicDataExample
{
[TestMethod]
[DynamicData(nameof(GetTestData), IgnoreMessage = "Feature not ready")]
public void TestMethod(int value1, string value2)
{
// All test cases from GetTestData are skipped
}
public static IEnumerable<(int, string)> GetTestData()
{
yield return (1, "first");
yield return (2, "second");
}
}
Petunjuk / Saran
Untuk mengabaikan kasus pengujian individual, gunakan TestDataRow<T> dengan propertinya IgnoreMessage . Lihat bagian TestDataRow<T> .
TestDataRow
Kelas ini TestDataRow<T> memberikan kontrol yang ditingkatkan atas data pengujian dalam pengujian berbasis data. Gunakan IEnumerable<T> dari TestDataRow<T> sebagai jenis pengembalian sumber data Anda untuk menentukan:
Nota
MSTest memperkenalkan TestDataRow<T> pada versi 3.8.
- Nama tampilan kustom: Atur nama tampilan unik per kasus pengujian menggunakan DisplayName properti .
- Kategori pengujian: Lampirkan metadata ke kasus pengujian individual menggunakan TestCategories properti .
- Abaikan pesan: Lewati kasus pengujian tertentu dengan alasan menggunakan IgnoreMessage properti .
- Data berjenis aman: Gunakan generik untuk data uji yang berjenis kuat.
Penggunaan dasar
[TestClass]
public class TestDataRowExample
{
[TestMethod]
[DynamicData(nameof(GetTestDataRows))]
public void TestMethod(int value1, string value2)
{
Assert.IsTrue(value1 > 0);
}
public static IEnumerable<TestDataRow<(int, string)>> GetTestDataRows()
{
yield return new TestDataRow<(int, string)>((1, "first"))
{
DisplayName = "Test Case 1: Basic scenario",
};
yield return new TestDataRow<(int, string)>((2, "second"))
{
DisplayName = "Test Case 2: Edge case",
TestCategories = ["HighPriority", "Critical"],
};
yield return new TestDataRow<(int, string)>((3, "third"))
{
IgnoreMessage = "Not yet implemented",
};
}
}
DataSourceAttribute
Nota
DataSource hanya tersedia dalam .NET Framework. Untuk proyek .NET (Core), gunakan DataRow atau DynamicData sebagai gantinya.
DataSourceAttribute menghubungkan pengujian ke sumber data eksternal seperti berkas CSV, berkas XML, atau basis data.
Untuk informasi terperinci, lihat:
ITestDataSource
Antarmuka ITestDataSource memungkinkan Anda membuat atribut sumber data yang sepenuhnya disesuaikan. Terapkan antarmuka ini saat Anda memerlukan perilaku yang tidak didukung atribut bawaan, seperti menghasilkan data pengujian berdasarkan variabel lingkungan, file konfigurasi, atau kondisi runtime lainnya.
Anggota antarmuka
Antarmuka mendefinisikan dua metode:
| Metode | Tujuan |
|---|---|
GetData(MethodInfo) |
Mengembalikan data pengujian sebagai IEnumerable<object?[]> |
GetDisplayName(MethodInfo, object?[]?) |
Mengembalikan nama tampilan untuk kasus pengujian |
Membuat atribut sumber data kustom
Untuk membuat sumber data kustom, tentukan kelas atribut yang mewarisi dari Attribute dan mengimplementasikan ITestDataSource:
using System.Globalization;
using System.Reflection;
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyDataSourceAttribute : Attribute, ITestDataSource
{
public IEnumerable<object?[]> GetData(MethodInfo methodInfo)
{
// Return test data based on your custom logic
yield return [1, "first"];
yield return [2, "second"];
yield return [3, "third"];
}
public string? GetDisplayName(MethodInfo methodInfo, object?[]? data)
{
return data is null
? null
: string.Format(CultureInfo.CurrentCulture, "{0} ({1})", methodInfo.Name, string.Join(",", data));
}
}
[TestClass]
public class CustomDataSourceExample
{
[TestMethod]
[MyDataSource]
public void TestWithCustomDataSource(int value, string name)
{
Assert.IsTrue(value > 0);
Assert.IsNotNull(name);
}
}
Contoh dunia nyata: Data pengujian berbasis lingkungan
Contoh ini menunjukkan atribut kustom yang menghasilkan data pengujian berdasarkan kerangka kerja target, pemfilteran berdasarkan sistem operasi:
using System.Globalization;
using System.Reflection;
[AttributeUsage(AttributeTargets.Method)]
public class TargetFrameworkDataAttribute : Attribute, ITestDataSource
{
private readonly string[] _frameworks;
public TargetFrameworkDataAttribute(params string[] frameworks)
{
_frameworks = frameworks;
}
public IEnumerable<object?[]> GetData(MethodInfo methodInfo)
{
bool isWindows = OperatingSystem.IsWindows();
foreach (string framework in _frameworks)
{
// Skip .NET Framework on non-Windows platforms
if (!isWindows && framework.StartsWith("net4", StringComparison.Ordinal))
{
continue;
}
yield return [framework];
}
}
public string? GetDisplayName(MethodInfo methodInfo, object?[]? data)
{
return data is null
? null
: string.Format(CultureInfo.CurrentCulture, "{0} ({1})", methodInfo.Name, data[0]);
}
}
[TestClass]
public class CrossPlatformTests
{
[TestMethod]
[TargetFrameworkData("net48", "net8.0", "net9.0")]
public void TestOnMultipleFrameworks(string targetFramework)
{
// Test runs once per applicable framework
Assert.IsNotNull(targetFramework);
}
}
Petunjuk / Saran
Untuk kasus sederhana di mana Anda hanya perlu menyesuaikan nama tampilan atau menambahkan metadata, pertimbangkan untuk menggunakan TestDataRow<T> dengan DynamicData alih-alih menerapkan ITestDataSource. Cadangkan implementasi kustom ITestDataSource untuk skenario yang memerlukan pemfilteran dinamis atau logika pembuatan data yang kompleks.
Strategi perumusan
Atribut pengujian berbasis data mendukung properti TestDataSourceUnfoldingStrategy, yang mengontrol bagaimana kasus pengujian muncul di Test Explorer dan hasil TRX. Properti ini juga menentukan apakah Anda dapat menjalankan kasus pengujian individual secara independen.
Fase penemuan dan eksekusi
MSTest memproses pengujian berbasis data dalam dua fase yang berbeda:
-
Fase penemuan: MSTest mengevaluasi semua atribut sumber data (
DataRow, ,DynamicDataITestDataSource) untuk menentukan daftar kasus pengujian. Evaluasi ini terjadi sebelum salah satu hook siklus hidup MSTest reguler dijalankan—AssemblyInitialize,ClassInitialize, dan metode penyiapan lainnya belum dieksekusi. - Fase eksekusi: MSTest menjalankan siklus hidup normal (inisialisasi perakitan, inisialisasi kelas, inisialisasi pengujian, metode pengujian, pembersihan) dan menjalankan setiap kasus pengujian dengan datanya.
Karena sumber data dievaluasi selama penemuan, kode pembuatan data Anda tidak dapat mengandalkan status apa pun yang disiapkan oleh AssemblyInitialize atau ClassInitialize. Jika sumber data Anda bergantung pada logika penyiapan (misalnya, membaca dari koneksi database yang diinisialisasi di ClassInitialize), evaluasi sumber data gagal selama penemuan.
Strategi yang tersedia
| Strategi | Perilaku |
|---|---|
Auto (standar) |
MSTest menentukan strategi pengembangan terbaik. |
Unfold |
Semua kasus pengujian diperluas dan ditampilkan secara individual. |
Fold |
Semua kasus pengujian digabungkan menjadi satu simpul pengujian. |
Tes terlipat vs. terbuka
Strategi pembukaan memengaruhi bagaimana hasil pengujian dilaporkan di Test Explorer dan output TRX.
- Pengujian yang belum dilipat: Setiap baris data muncul sebagai entri pengujian independen terpisah di Test Explorer dan TRX. Anda dapat menjalankan, men-debug, atau memfilter kasus pengujian individual. Setiap entri memiliki status pass/fail sendiri.
- Pengujian tergulung: Semua baris data muncul sebagai satu simpul pengujian di Test Explorer. Satu entri muncul di TRX, dengan beberapa hasil yang terkait dengan kasus pengujian tunggal tersebut. Anda tidak dapat menjalankan atau memfilter baris data individual secara independen.
Pengecualian selama penemuan menyebabkan pelipatan
Ketika MSTest mengevaluasi sumber data saat penemuan dan evaluasi melemparkan pengecualian, proses pengujian kembali ke keadaan terlipat terlepas dari strategi pembukaan yang dikonfigurasi. Karena kerangka kerja tidak dapat menghitung kasus pengujian individual, kerangka kerja mendaftarkan metode pengujian sebagai entri tunggal (terlipat).
Pada waktu eksekusi, MSTest mengevaluasi sumber data lagi sebagai bagian dari siklus hidup normal. Jika pengecualian disebabkan oleh status penyiapan yang hilang (misalnya, dependensi yang ClassInitialize sediakan), sumber data mungkin berhasil selama eksekusi karena proses siklus hidup sekarang telah berjalan.
Nota
Saat men-debug pengujian yang dilemparkan selama penemuan, Anda mungkin melihat pengecualian (misalnya, a NullReferenceException) sebelum pengujian dimulai. Pengecualian ini berasal dari evaluasi fase penemuan. Tekan Lanjutkan di debugger—pengujian kemudian dijalankan secara normal karena fase eksekusi menjalankan siklus hidup MSTest penuh, termasuk metode inisialisasi. Untuk detail selengkapnya, lihat microsoft/testfx#7774.
Kapan harus mengubah strategi
Untuk sebagian besar skenario, perilaku default Auto memberikan keseimbangan terbaik. Pertimbangkan untuk mengubah strategi pelaksanaan jika Anda memiliki persyaratan khusus.
- Gunakan
Foldjika sumber data Anda bergantung pada status runtime atau logika penyiapan yang tidak tersedia selama penemuan. - Gunakan
Folduntuk sumber data non-deterministik yang mengembalikan nilai yang berbeda pada setiap evaluasi. - Gunakan
Folduntuk mengurangi overhead saat performa menjadi perhatian dengan sejumlah besar kasus pengujian.
Contoh penggunaan
[TestClass]
public class UnfoldingExample
{
[TestMethod(UnfoldingStrategy = TestDataSourceUnfoldingStrategy.Unfold)] // That's the default behavior
[DataRow(1, "one")]
[DataRow(2, "two")]
[DataRow(3, "three")]
public void TestMethodWithUnfolding(int value, string text)
{
// Each test case appears individually in Test Explorer
}
[TestMethod(UnfoldingStrategy = TestDataSourceUnfoldingStrategy.Fold)]
[DataRow(1, "one")]
[DataRow(2, "two")]
[DataRow(3, "three")]
public void TestMethodWithFolding(int value, string text)
{
// All test cases appear as a single collapsed node
}
}
Praktik terbaik
-
Pilih atribut yang tepat: Gunakan
DataRowuntuk data sederhana dan sebaris,CombinatorialDatauntuk kombinasi lengkap input independen, danDynamicDatauntuk data kompleks atau komputasi. -
Beri nama kasus pengujian Anda: Gunakan
DisplayNameuntuk membuat kegagalan pengujian lebih mudah diidentifikasi. - Jaga agar sumber data tetap dekat: Tentukan sumber data di kelas yang sama jika memungkinkan untuk pemeliharaan yang lebih baik.
- Gunakan data yang bermakna: Pilih data pengujian yang menjalankan kasus tepi dan kondisi batas.