Veri yoğun bir uygulama yazıyorum. Aşağıdaki testlerim var. Çalışıyorlar, ama oldukça gereksizler.Dinamik nesneleri bir NUnit TestCase işlevine nasıl geçirirsiniz?
[Test]
public void DoSanityCheck_WithCountEqualsZeroAndHouseGrossIsGreater_InMerchantAggregateTotals_SetsWarning()
{
report.Merchants[5461324658456716].AggregateTotals.ItemCount = 0;
report.Merchants[5461324658456716].AggregateTotals._volume = 0;
report.Merchants[5461324658456716].AggregateTotals._houseGross = 1;
report.DoSanityCheck();
Assert.IsTrue(report.FishyFlag);
Assert.That(report.DataWarnings.Where(x=> x is Reports.WarningObjects.ImbalancedVariables && x.mid == 5461324658456716 && x.lineitem == "AggregateTotals").Count() > 0);
}
[Test]
public void DoSanityCheck_WithCountEqualsZeroAndHouseGrossIsGreater_InAggregateTotals_SetsWarning()
{
report.AggregateTotals.ItemCount = 0;
report.AggregateTotals._volume = 0;
report.AggregateTotals._houseGross = 1;
report.DoSanityCheck();
Assert.IsTrue(report.FishyFlag);
Assert.That(report.DataWarnings.Where(x=> x is Reports.WarningObjects.ImbalancedVariables && x.mid == null && x.lineitem == "AggregateTotals").Count() > 0);
}
[Test]
public void DoSanityCheck_WithCountEqualsZeroAndHouseGrossIsGreater_InAggregateTotalsLineItem_SetsWarning()
{
report.AggregateTotals.LineItem["WirelessPerItem"].ItemCount = 0;
report.AggregateTotals.LineItem["WirelessPerItem"]._volume = 0;
report.AggregateTotals.LineItem["WirelessPerItem"]._houseGross = 1;
report.DoSanityCheck();
Assert.IsTrue(report.FishyFlag);
Assert.That(report.DataWarnings.Where(x=> x is Reports.WarningObjects.ImbalancedVariables && x.mid == null && x.lineitem == "WirelessPerItem").Count() > 0);
}
aynı özellikleri sadece farklı konteyner nesnelerin çocuklar ve sonunda iddia değişikliği birkaç değerleri olarak, başında değiştirilir. Bunların birkaç düzine, farklı özellikleri kontrol etmem gerekiyor. Bu yüzden testi parametrelemek istiyorum. Hile, kapsayıcı nesneyi sınama için bir parametre olarak geçiriyor. Kapsayıcı nesnesi, Test fikstürü SetUp'da başlatılır.
[TestCase(report.AggregateTotals.LineItem["WirelessPerItem"], 0, "WirelessPerItem")]
[TestCase(report.AggregateTotals, 4268435971532164, "AggregateTotals")]
[TestCase(report.Merchants[5461324658456716].AggregateTotals, 5461324658456716, "WirelessPerItem")]
[TestCase(report.Merchants[4268435971532164].LineItem["EBTPerItem"], 4268435971532164, "EBTPerItem")]
public void DoSanityCheck_WithCountEqualsZeroAndHouseGrossIsGreater_TestCase_SetsWarning(object container, long mid, string field)
{
container.ItemCount = 0;
container._volume = 0;
container._houseGross = 1;
report.DoSanityCheck();
Assert.IsTrue(report.FishyFlag);
Assert.That(report.DataWarnings.Where(x=> x is Reports.WarningObjects.ImbalancedVariables && x.mid == mid && x.lineitem == field).Count() > 0);
}
Ama bu işe yaramazsa ve ben o iş ya eğer mümkünse nasıl emin değilim: Böyle bir şey olmazdı ulaşmak istediğiniz ne
.
CountEqualsZeroAndHouseGrossIsGreaterTestCases özelliği statik – moyomeh
olmalıdır. C# 6+ kullanıyorsanız, adı bir dize olarak kullanmak yerine 'nameof' kullanabilirsiniz. [TestCaseSource (yani (CountEqualsZeroAndHouseGrossIsGreaterTestCases))], bu yazı yazmayı güçlü kılar. –
NUnit 3'ten itibaren, TestCaseSource da statik kaynaklarla sınırlıdır. – buckminst