示例:
Assert.AreEqual(**null**, Program.nDaysMonth(5, -10), "Error nDaysMonth, Month may -10.");
我希望有一个异常(exception)。如何在 Assert.AreEqual 中期待异常?
谢谢。
最佳答案
你不使用Assert.AreEqual
,你使用Assert.Throws
:
Assert.Throws<ArgumentOutOfRangeException>(() => Program.nDaysMonth(5, -10));
这会检查是否抛出了正确的异常。如果你想添加更多的断言,你可以使用返回值:
var exception = Assert.Throws<ArgumentOutOfRangeException>(...);
Assert.AreEqual("Foo", exception.Message); // Or whatever
这至少适用于 NUnit 和 xUnit;如果您使用不同的测试框架,您应该寻找类似的功能。如果它不存在,我建议您自己实现它 - 这很容易做到,并且比替代方案(一个 try/catch block ,或一个方法范围的 ExpectedException
属性)干净得多。或者,如果可以的话,更改单元测试框架...
我还强烈建议您开始遵循正常的 .NET 命名约定 - nDaysMonth
不是一个好的方法名称。 .
某些框架支持使用 [ExpectedException]
属性装饰方法 - 我建议反对使用它:
- 这使得测试不清楚您希望在何处抛出异常。
- 如果在测试方法的其他地方抛出异常(即您的代码被破坏),测试仍然会通过。
- 抛出异常后,您将无法执行任何其他操作。
- 您无法检查有关异常的任何其他信息。
关于C# 如何在 Assert.AreEqual 中期待异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30327484/