在我的Nunit测试程序中,我想通过验证消息来验证它是否得到了写参数异常。
[Test]
public void ArgumentsWorkbookNameException()
{
const string workbookName = "Tester.xls";
var args = new[] { workbookName, "Sheet1", "Source3.csv", "Sheet2", "Source4.csv" };
Assert.Throws(typeof(ArgumentException), delegate { var appargs = new ApplicationArguments(args); }, "Invalid ending parameter of the workbook. Please use .xlsx");
}
在测试之后,当我在主程序中修改消息时,这不起作用。
int wbLength = args[0].Length;
// Telling the user to type in the correct workbook name file.
if (args[0].Substring(wbLength-5,5)!=".xlsx")
{
throw new ArgumentException(
"Invalid ending parameter of the workbook. Please use .xlsx random random");
}
无论我是否更改了消息,单元测试仍然通过。
我该怎么做呢?或者在C#中没有这样的东西。我的同事说在Ruby和RSPEC中有这样的选项,但他不是100%确定在C#上。
发布于 2015-01-15 02:17:44
使用fluent接口创建断言:
Assert.That(() => new ApplicationArguments(args),
Throws.TypeOf<ArgumentException>()
.With.Message.EqualTo("Invalid ending parameter of the workbook. Please use .xlsx random random"));
发布于 2013-07-24 01:03:02
我同意Jon的观点,“这样的测试是不必要的脆弱”。但是,至少有两种方法可以检查异常消息:
1: Assert.Throws返回异常,可以对其消息进行断言:
var exception = Assert.Throws<ArgumentException>(() => new ApplicationArguments(args));
Assert.AreEqual("Invalid ending parameter of the workbook. Please use .xlsx random random", exception.Message);
2:在NUnit 3之前,您还可以使用ExpectedException
属性。但是,请注意,属性等待整个测试代码中的异常,而不仅仅是抛出异常的代码。因此,不建议使用此属性。
[Test]
[ExpectedException(typeof(ArgumentException), ExpectedMessage = "Invalid ending parameter of the workbook. Please use .xlsx random random")]
public void ArgumentsWorkbookNameException()
{
const string workbookName = "Tester.xls";
var args = new[] { workbookName, "Sheet1", "Source3.csv", "Sheet2", "Source4.csv" };
new ApplicationArguments(args);
}
发布于 2021-04-20 19:38:39
在.NET Core3.1 MSTest项目中,我就是这样做的。
[TestMethod]
public async Task SaveItemAsync_NameIsNull_ThrowsException()
{
var item = new Item
{
Name = null
};
var result = await Assert.ThrowsExceptionAsync<ArgumentException>(() => _service.SaveItemAsync(item));
Assert.AreEqual("The item's name must be set.", result.Message);
}
https://stackoverflow.com/questions/17816285
复制相似问题