Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veri temelli test, aynı test yöntemini birden çok giriş veri kümesiyle çalıştırmanıza olanak tanır. Her test çalışması için ayrı test yöntemleri yazmak yerine, test mantığınızı bir kez tanımlayın ve öznitelikler veya dış veri kaynakları aracılığıyla farklı girişler sağlayın.
Genel Bakış
MSTest, veri temelli test için çeşitli öznitelikler sağlar:
| Özellik | Kullanım örneği | En iyi kullanım alanı: |
|---|---|---|
DataRow |
Satır içi test verileri | Basit, statik test çalışmaları |
CombinatorialData |
Parametre değerlerinin Kartezyen ürünü | Bağımsız girişlerin kapsamlı birleşimleri |
DynamicData |
Yöntemler, özellikler veya alanlardan veriler | Karmaşık veya hesaplanan test verileri |
DataSource |
Dış veri dosyaları veya veritabanları | Dış veri kaynaklarıyla eski senaryolar |
MSTest, veri temelli senaryoları genişletmek için aşağıdaki türleri de sağlar:
-
TestDataRow<T>:ITestDataSourcetürü,DynamicDatauygulamaları (dahil olmak üzere) için her bir test çalışmasına görünen adlar, kategoriler ve mesajları yoksayma gibi meta veri desteği ekler. -
ITestDataSource: Tamamen özel veri kaynağı öznitelikleri oluşturmak için özel bir öznitelik üzerinde uygulayabileceğiniz bir arabirim.
Important
Yerleşik kombinatoryal test MSTest 4.4 için planlanır ve MSTest 4.4.0 yayımlanana kadar yalnızca önizleme derlemelerinde kullanılabilir. Önceki MSTest sürümleri için community-maintained Combinatorial.MSTest paketini kullanın.
DataRowAttribute
, DataRowAttribute aynı test yöntemini birden çok farklı girişle çalıştırmanıza olanak tanır. ile DataRowdekore edilmiş bir test yöntemine bir veya daha fazla TestMethodAttribute öznitelik uygulayın.
Bağımsız değişken sayısı ve türleri, test yöntemi imzası ile tam olarak eşleşmelidir.
Tavsiye
İlgili çözümleyiciler:
-
MSTEST0014 bağımsız değişkenlerin test yöntemi imzası ile eşleştiğini
DataRowdoğrular. -
MSTEST0042 aynı test çalışmasını birden çok kez çalıştıracak yinelenen
DataRowgirişleri algılar.
Temel kullanım
[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));
}
}
Desteklenen bağımsız değişken türleri
DataRow temel öğeler, dizeler, diziler ve null değerler gibi çeşitli bağımsız değişken türlerini destekler:
[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
}
}
Uyarı
MSTest v3.10 itibarıyla, DateOnly argümanları olarak ve TimeOnly parametreli testlerinde DataRow ile DynamicData kullanın.
Değişken sayıda bağımsız değişken için parametreler kullanma
params Değişken sayıda bağımsız değişkeni kabul etmek için anahtar sözcüğünü kullanın:
[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);
}
}
Genel test yöntemleri
MSTest v3.8'den başlayarak, bir TestMethod tür parametrelerine sahip olabilir. Çerçeve, tür bağımsız değişkenlerini DataRow veya DynamicData değerlerinden çıkarsar:
[TestMethod]
[DataRow(42)]
[DataRow("alpha")]
public void Value_RoundTrips<T>(T value)
{
Assert.AreEqual(value, value);
}
Özel görüntüleme adları
Test çalışmalarının DisplayName Test Gezgini'nde nasıl görüneceğini özelleştirmek için özelliğini ayarlayın:
[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);
}
}
Tavsiye
Test meta verileri üzerinde daha fazla denetim için TestDataRowTestDataRow<T> , test kategorileri ile birlikte görüntü adlarını destekler ve bireysel test durumları için iletileri görmezden gelir.
Belirli test senaryolarını yoksayma
MSTest v3.8'den başlayarak, belirli veri satırlarını atlamak için özelliğini kullanın IgnoreMessage :
[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
MSTest 4.4 önizleme derlemelerinde özniteliği, CombinatorialData her test yöntemi parametresi için değerlerin Kartezyen ürününü oluşturur.
Microsoft.VisualStudio.TestTools.UnitTesting.Combinatorial ad alanındaki türleri kullanın.
Aşağıdaki seçeneklerden biriyle her parametre için değerler sağlayın:
| Değer kaynağı | Davranış |
|---|---|
| Çıkarsanan değerler |
int için 0 ve 1; bool için null ve true; bir numaralandırma için tüm tanımlı değerler; ve desteklenen bu türlerden birinin null atanabilir sürümü için false ile çıkarılan değerleri kullanır. |
CombinatorialValues |
Özniteliğine geçirdiğiniz açık değerleri kullanır. |
CombinatorialRange |
Başlangıç değeri ve sayı adedinden ya da dahil uç noktalar ve bir adımdan int veya uint değerleri oluşturur. |
CombinatorialRandomData |
Benzersiz int değerler oluşturur. Değerleri denetlemek için , Minimum, Maximumve isteğe bağlı olarak Seed ayarlayınCount. |
Aşağıdaki test, iki çıkarımlı bool değeri, iki açık değeri, üç aralık değerini ve iki dağıtılmış rastgele değeri birleştirir. MSTest, bu bağımsız parametre kümelerinden 24 test çalışması oluşturur.
[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
Her parametreye en fazla bir kombinasyonlu değer sağlayıcısı uygulayın. MSTest'in değerlerini belirleyemediği bir parametre türü için CombinatorialRange, CombinatorialRandomData, ICombinatorialValuesProvider veya CombinatorialValues uygulayan özel bir öznitelik uygulayın.
CombinatorialData kapsamlı bir Kartezyen ürünü oluşturur. Çift yönlü oluşturma, permütasyonlar, parametre değerleri arasındaki dışlamalar, üye destekli değerler veya sınıf verileri desteklenmez. Değerler birbirine bağlı olduğunda veya oluşturulan test durumlarını filtrelemeniz gerektiğinde ITestDataSource ya da özel bir DynamicData kullanın.
DynamicDataAttribute
, DynamicDataAttribute yöntemlerden, özelliklerden veya alanlardan test verileri sağlamanıza olanak tanır. Test verileri karmaşık, dinamik olarak hesaplanmış veya satır içi DataRow öznitelikler için çok ayrıntılı olduğunda bu özniteliği kullanın.
Desteklenen veri kaynağı türleri
Veri kaynağı, IEnumerable<T>'yı döndürebilir, burada T aşağıdaki tabloda listelenen türlerden biridir.
IEnumerable<T> uygulayan tüm koleksiyonlar çalışır, List<T> dahil olmak üzere T[] gibi diziler veya özel koleksiyon türleri. Gereksinimlerinize göre seçin:
| Dönüş türü | Tür güvenliği | Meta veri desteği | En iyi kullanım alanı: |
|---|---|---|---|
ValueTuple (örneğin, (int, string)) |
Derleme zamanı | Hayı | Çoğu senaryolar - tam tür denetiminin olduğu basit söz dizimi |
Tuple<...> |
Derleme zamanı | Hayı | Eğer kullanamıyorsanız ValueTuple |
TestDataRow<T> |
Derleme zamanı | Yes | Görünen adlara, kategorilere veya yoksayılan iletilere ihtiyaç duyan test vakaları |
object[] |
Yalnızca çalışma zamanı | Hayı | Eski kod - yeni testlerden kaçının |
Tavsiye
Yeni test verileri yöntemleri için, basit durumlar için ValueTuple veya meta verilere ihtiyacınız olduğunda TestDataRow<T> kullanın.
object[]‘dan kaçının çünkü derleme zamanı türü denetimi yoktur ve tür uyuşmazlıklarından kaynaklanan çalışma zamanı hatalarına neden olabilir.
Veri kaynakları
Veri kaynağı bir yöntem veya özellik ve MSTest v3.11 ile başlayarak bir alan olabilir. Bu kaynaklar birbirinin yerine kullanılabilir olduğundan tercihinize göre seçin:
Uyarı
MSTest v3.8'den başlayarak veri DynamicData kaynağı türünü otomatik olarak algılar. Açıkça belirtmeniz DynamicDataSourceType gerekmez.
[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);
}
}
Uyarı
Veri kaynağındaki yöntemler, özellikler ve alanlar public static olmalı ve desteklenen bir türde IEnumerable<T> döndürmelidir.
Uyarı
MSTest v3.11'den başlayarak veri kaynağı bir alan olabilir. Önceki sürümler yöntemleri ve özellikleri destekler.
Tavsiye
İlgili çözümleyici: MSTEST0018 veri kaynağının var olduğunu, erişilebilir olduğunu ve doğru imzaya sahip olduğunu doğrular.
Farklı bir sınıftan veri kaynağı
tür parametresini kullanarak farklı bir sınıf belirtin:
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);
}
}
Parametreli DynamicData kaynak yöntemleri
MSTest v3.10'dan başlayarak, değerleri şu özelliğe sahip bir DynamicData kaynak yönteme Arguments geçirin:
[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)];
Özel görüntüleme adları
Özelliğini kullanarak test durumu görüntülenme adlarını özelleştirin
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]}'";
}
}
Uyarı
Görünen ad metodu public static olmalı, bir string döndürmeli ve iki parametre kabul etmelidir: MethodInfo ve object[].
Tavsiye
Özel görünen adlara yönelik daha basit bir yaklaşım için ayrı bir yöntem yerine TestDataRow<T> nesnesini ve onun DisplayName özelliğini kullanmayı göz önünde bulundurun.
Veri kaynağındaki tüm test durumlarını yoksayma
MSTest v3.8'den başlayarak, tüm test çalışmalarını atlamak için kullanın IgnoreMessage :
[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");
}
}
Tavsiye
Bireysel test durumlarını yoksaymak için TestDataRow<T> ögesini, IgnoreMessage özelliği ile birlikte kullanın.
TestDataRow<T> bölümüne bakın.
TestDataRow
sınıfı, TestDataRow<T> veri temelli testlerdeki test verileri üzerinde gelişmiş denetim sağlar. IEnumerable<T> ve TestDataRow<T> öğesini veri kaynağınızın dönüş türü olarak kullanarak belirtin:
Uyarı
MSTest, 3.8 sürümünde TestDataRow<T> özelliğini sundu.
- Özel görünen adlar: özelliğini kullanarak DisplayName test çalışması başına benzersiz bir görünen ad ayarlayın.
- Test kategorileri: özelliğini kullanarak TestCategories tek tek test durumlarına meta veri ekleyin.
- İletileri yoksay: IgnoreMessage özelliğini kullanarak belirli test vakalarını nedenleriyle birlikte atlayın.
- Tür açısından güvenli veriler: Kesin türü belirlenmiş test verileri için genel değerleri kullanın.
Temel kullanım
[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
Uyarı
DataSource yalnızca .NET Framework'te kullanılabilir. .NET (Core) projeleri için bunun yerine DataRow veya DynamicData kullanın.
testleri DataSourceAttribute CSV dosyaları, XML dosyaları veya veritabanları gibi dış veri kaynaklarına bağlar.
Ayrıntılı bilgi için bkz:
ITestDataSource
Arabirim, ITestDataSource tamamen özel veri kaynağı öznitelikleri oluşturmanıza olanak tanır. Ortam değişkenlerine, yapılandırma dosyalarına veya diğer çalışma zamanı koşullarına göre test verileri oluşturma gibi yerleşik özniteliklerin desteklemediği davranışlara ihtiyacınız olduğunda bu arabirimi uygulayın.
Arabirim üyeleri
Arayüz iki yöntem tanımlar:
| Yöntem | Amaç |
|---|---|
GetData(MethodInfo) |
Test verilerini şu şekilde döndürür: IEnumerable<object?[]> |
GetDisplayName(MethodInfo, object?[]?) |
Bir test vakası için görünen adı döndürür |
Özel veri kaynağı özniteliği oluşturma
Özel veri kaynağı oluşturmak için Attribute öğesinden devralan ve ITestDataSource bir öznitelik sınıfı uygulayın.
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);
}
}
Gerçek dünya örneği: Ortam tabanlı test verileri
Bu örnekte, hedef çerçevelere göre test verileri oluşturan, işletim sistemine göre filtreleme sağlayan özel bir öznitelik gösterilmektedir:
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);
}
}
Tavsiye
Yalnızca görünen adları özelleştirmeniz veya meta veriler eklemeniz gereken basit durumlar için, TestDataRow<T> kullanmayı,DynamicData uygulamayı ITestDataSource yerine düşünün. Dinamik filtreleme veya karmaşık veri oluşturma mantığı gerektiren senaryolar için özel ITestDataSource uygulamaları ayırın.
Geliştirme stratejisi
Veri temelli test öznitelikleri, test vakalarının Test Gezgini ve TRX sonuçlarında nasıl göründüğünü denetleyen TestDataSourceUnfoldingStrategy özelliğini destekler. Bu özellik ayrıca tek tek test çalışmalarını bağımsız olarak çalıştırıp çalıştıramayacağınızı da belirler.
Bulma ve yürütme aşamaları
MSTest, veri temelli testleri iki ayrı aşamada işler:
-
Bulma aşaması: MSTest, test çalışmalarının listesini belirlemek için tüm veri kaynağı özniteliklerini (
DataRow,DynamicData,ITestDataSource) değerlendirir. Bu değerlendirme, normal MSTest yaşam döngüsü kancalarından herhangi biri henüz çalışmadan veAssemblyInitialize,ClassInitializeile diğer kurulum yöntemleri yürütülmeden önce gerçekleşir. - Yürütme aşaması: MSTest normal yaşam döngüsünü (derleme başlatma, sınıf başlatma, test başlatma, test yöntemi, temizleme) çalıştırır ve her test çalışmasını kendi verileriyle yürütür.
Veri kaynakları bulma sırasında değerlendirildiğinden, veri oluşturma kodunuz AssemblyInitialize veya ClassInitialize tarafından ayarlanan herhangi bir duruma bağımlı olamaz. Veri kaynağınız kurulum mantığına bağlıysa (örneğin, içinde ClassInitializebaşlatılan bir veritabanı bağlantısından okuma), bulma sırasında veri kaynağı değerlendirmesi başarısız olur.
Kullanılabilir stratejiler
| Strateji | Davranış |
|---|---|
Auto (varsayılan) |
MSTest, en iyi açılma stratejisini belirler. |
Unfold |
Tüm test çalışmaları tek tek genişletilir ve gösterilir. |
Fold |
Tüm test durumları tek bir test düğümüne daraltılır. |
Katlanmış ve açılmış testler
Uygulama stratejisi, test sonuçlarının Test Gezgini ve TRX çıktısında nasıl bildirildiğini etkiler.
- Açılmamış testler: Her veri satırı, Test Gezgini ve TRX'te ayrı, bağımsız bir test girişi olarak görünür. Tek tek test çalışmalarını çalıştırabilir, hata ayıklayabilir veya filtreleyebilirsiniz. Her girişin kendi başarılı/başarısız durumu vardır.
- Katlanmış testler: Tüm veri satırları Test Gezgini'nde tek bir test düğümü olarak görünür. TRX'te tek bir giriş görüntülenir ve tek bir test çalışması ile ilişkili birden çok sonuç bulunur. Tek tek veri satırlarını bağımsız olarak çalıştıramaz veya filtreleyemezsiniz.
Keşif sırasında oluşan bir istisna katlanmalara neden oluyor.
MSTest keşif sırasında bir veri kaynağını değerlendirdiğinde ve değerlendirme bir özel durum oluşturursa, test, yapılandırılmış açılma stratejisinden bağımsız olarak bükülmüş durumda geri döner. Çerçeve tek tek test çalışmalarını numaralandıramadığından, test yöntemini tek bir (katlanmış) giriş olarak kaydeder.
Yürütme zamanında MSTest, veri kaynağını normal yaşam döngüsünün bir parçası olarak yeniden değerlendirir. Özel durum, eksik kurulum durumundan (örneğin, sağlayan bir bağımlılık ClassInitialize ) kaynaklandıysa, yaşam döngüsü kancaları artık çalıştırıldığından veri kaynağı yürütme sırasında başarılı olabilir.
Uyarı
Bulma sırasında oluşan bir testte hata ayıklarken, test başlamadan önce bir özel durum (örneğin, a NullReferenceException) görebilirsiniz. Bu istisna bulma aşaması değerlendirmesinden gelir. Hata ayıklayıcıda Devam'a basın; yürütme aşaması başlatma yöntemleri de dahil olmak üzere tam MSTest yaşam döngüsünü çalıştırdığından test normal şekilde yürütülür. Diğer ayrıntılar için bkz. microsoft/testfx#7774.
Strateji ne zaman değiştirilir?
Çoğu senaryoda, varsayılan Auto davranış en iyi dengeyi sağlar. Belirli gereksinimleriniz olduğunda açılma stratejisini değiştirmeyi göz önünde bulundurun:
- "
Foldkullanın, eğer veri kaynaklarınız keşif sırasında kullanılamayabilecek çalışma zamanı durumuna veya kurulum mantığına bağlıysa." - Her değerlendirmede farklı değerler döndüren belirleyici olmayan veri kaynakları için kullanın
Fold. - Çok sayıda test çalışması için performans önemli olduğunda ek yükü azaltmak için kullanın
Fold.
Örnek kullanım
[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
}
}
En iyi yöntemler
-
Doğru özniteliği seçin: Basit, satır içi veriler,
CombinatorialDatabağımsız girişlerin kapsamlı birleşimleri veDynamicDatakarmaşık veya hesaplanan veriler için kullanınDataRow. -
Test durumlarınızı adlandırın: Test hatalarının tanımlanmasını kolaylaştırmak için kullanın
DisplayName. - Veri kaynaklarını yakın tutun: Daha iyi bakım için mümkün olduğunda veri kaynaklarını aynı sınıfta tanımlayın.
- Anlamlı veriler kullanma: Uç durumlarını ve sınır koşullarını kullanan test verilerini seçin.