Làm cách nào để kiểm tra ngoại lệ trong một TestCase với NUnit3?Kiểm tra các ngoại lệ với thuộc tính [TestCase] trong NUnit 3?
Hãy nói rằng tôi có một phương pháp Divide(a,b)
quy định như sau:
public double Divide(double a, double b)
{
if(Math.Abs(b) < double.Epsilon) throw new ArgumentException("Divider cannot be 0");
return a/b;
}
Tôi muốn thử nghiệm phương pháp này sử dụng NUnit 3,0 trường hợp thử nghiệm, vì vậy có lẽ tôi có:
[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));
}
Có cách để xác định một trường hợp thử nghiệm mà sẽ gây ra Divide() để ném một ArgumentException và bằng cách nào đó có điều này như là kết quả mong đợi, ví dụ cái gì đó dọc theo dòng:
[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));
}
(Tất nhiên tôi có thể xác định một phương pháp thử nghiệm riêng biệt và sử dụng Assert.Throws()
trong này, vì vậy đây là thuần túy vì tò mò)
Nếu bạn thực sự muốn để buộc hai vào một trường hợp thử nghiệm duy nhất, bạn có thể thêm một đối số throwsException boolean và thử nghiệm nó. Tuy nhiên, sự hiện diện của một nếu - thì - khác và hai kỳ vọng hoàn toàn khác nhau sẽ chứng minh rằng điều này thực sự nên là hai thử nghiệm khác nhau. – Charlie
Cú pháp thấp hơn dường như không hoạt động trên hệ thống của tôi (NUnit 3.2.1) khi sử dụng lệnh gọi phương thức tĩnh ... - đủ hài hước, 'Assert.Throws (() => MyStaticClass.MyStaticMethod (badparameter)) 'làm việc. –
ChriPf
Cảm ơn @ChriPf - Tôi nghĩ rằng nó phải là một func. Tôi đã chỉnh sửa nó. – Chris