我有这个:
Expect.Once.On( someObj ).Method( "SomeMethod" )
.With(1) // correct value is 2, I want this to fail
.Will( Throw.Exception( new Exception() ) );
当 nmock 检测到我输入 1 而不是 2 时,会引发异常。但是,测试失败(红色)而不是通过。即使我期待一个例外,如何使这个测试通过?
我有这个:
Expect.Once.On( someObj ).Method( "SomeMethod" )
.With(1) // correct value is 2, I want this to fail
.Will( Throw.Exception( new Exception() ) );
当 nmock 检测到我输入 1 而不是 2 时,会引发异常。但是,测试失败(红色)而不是通过。即使我期待一个例外,如何使这个测试通过?
如果您使用的是 NUnit,那么您可以执行以下操作:
Assert.Throws<Exception>(() => { someObj.SomeMethod(1); });
您还可以使用ExpectedException
属性装饰测试,尽管如果抛出任何属性,这将导致测试通过Exception
,而不仅仅是您要测试的语句。
编辑:如果您使用的是 MSTest,据我所知,您只能使用属性来预期异常,即
[ExpectedException(typeof(Exception)]
public void TestMethod() { ... }
您应该考虑从您的模拟中抛出更具体的异常类型,并期待该类型而不是普通的Exception
.
您还可以定义自己的方法来复制 NUnit 功能:
public static class ExceptionAssert
{
public static void Throws<T>(Action act) where T : Exception
{
try
{
act();
}
catch (T ex)
{
return;
}
catch (Exception ex)
{
Assert.Fail(string.Format("Unexpected exception of type {0} thrown", ex.GetType().Name));
}
Assert.Fail(string.Format("Expected exception of type {0}", typeof(T).Name));
}
}
[ExpectedException (typeof(Exception))]
编辑:谢谢,现在没有工作室,也不是 100% 确定语法。