2016-01-28 12 views
17

NUnit3 ile bir TestCase'deki istisnaları nasıl test ederim?NUnit 3'te [TestCase] ​​özniteliği ile özel durumlar için test ediliyor mu?

ı şöyle bir yöntem Divide(a,b) tanımlanmış var diyelim: belki ben,

public double Divide(double a, double b) 
{ 
    if(Math.Abs(b) < double.Epsilon) throw new ArgumentException("Divider cannot be 0"); 
    return a/b; 
} 

ben NUnit 3.0 test durumları kullanarak bu yöntemi test etmek istiyorum:

[TestCase(-10, 2, -5)] 
[TestCase(-1, 2, -0.5)] 
public void TestDivide(double a, double b, double result) 
{ 
    Assert.That(_uut.Divide(a, b), Is.EqualTo(result)); 
} 

mı orada Divide() 'nin bir ArgumentException atmasına neden olacak bir Test Örneği belirtme yolu ve bunun bir sonucu olarak beklenen sonuç, örn. çizgisinde bir şey:

[TestCase(-10, 2, -5)] 
[TestCase(-1, 2, -0.5)] 
[TestCase(-1, 0, ExpectedResult = TypeOf(ArgumentException)] 
public void TestDivide(double a, double b, double result) 
{ 
    Assert.That(_uut.Divide(a, b), Is.EqualTo(result)); 
} 

(Tabii ki ayrı bir test yöntemini tanımlar ve bu Assert.Throws() kullandığından, bu merak üzerinden saf olduğunu olabilir)

cevap

20

ExpectedException NUnit için doğru bir yolu olacaktır 2.X, ancak NUnit 3'ten kaldırıldı.

NUnit Google Group ve eşdeğer Dev grubunda çeşitli tartışma parçacıkları var - ancak kararın, beklenen sonuçların test edilmesi için genellikle daha iyi bir tasarım deseni olduğu kararlaştırılmış gibi görünüyor. ve ayrı yöntemlerde istisnalar. (link)

Bunu NUnit 3'te yapmanın tek yolu, iki ayrı teste ayırmak olacaktır. (NUnit çekirdek ekip tarafından cevap benzer bir soru Onaylandı, here.)

[TestCase(-10, 2, -5)] 
[TestCase(-1, 2, -0.5)] 
public void TestDivide(double a, double b, double result) 
{ 
    Assert.That(_uut.Divide(a, b), Is.EqualTo(result)); 
} 

[TestCase(-1, 0)] 
public void TestDivideThrows(double a, double b) 
{ 
    Assert.That(() => _uut.Divide(a, b), Throws.TypeOf<ArgumentException>()); 
} 
+1

Eğer gerçekten tek bir test kasanın içine iki zorlamak için istese, bir boolean throwsException argüman ekleyin ve test edebilir. Bununla birlikte, eğer öyleyse - o zaman - ve iki tamamen farklı beklentiler, bunun gerçekten iki farklı test olması gerektiğini kanıtlayabilir. – Charlie

+1

Statik bir yöntem çağrısı kullanıldığında sistemimde (NUnit 3.2.1) daha düşük sözdizimi görünmüyor ... - yeterince komik, "Assert.Throws (() => MyStaticClass.MyStaticMethod (badparameter)) 'çalışıyor. – ChriPf

+0

Teşekkürler @ChriPf - Bence bir func olmalı. Onu düzenledim. – Chris

İlgili konular