我有以下测试:
[Test]
public void Save_WhenExceptionIsThrown_ThenExceptionIsLogged()
{
A.CallTo(() => this.personRepository.Save(A<PrsPerson>._)).Throws(new Exception("Expected Exception"));
var personen = this.GetPersonenCollectionWithSpecificAmount(2);
this.testee.Save(personen);
A.CallTo(() => this.applicationLogger.Error(A<string>._)).MustHaveHappened(Repeated.Exactly.Once);
}
这就像魅力一样,但我想要断言的是,记录器是否与被抛出异常的消息完全一致,而不仅仅是任何字符串。
是否有可能捕获抛出的异常,如果是,如何?
提前致谢
答案 0 :(得分:3)
在方法调用lambda中明确指定所需的参数值。
尝试以下
A.CallTo(() => this.applicationLogger.Error("Expected Exception"))
.MustHaveHappened(Repeated.Exactly.Once);
答案 1 :(得分:1)
是否注入了记录器?你可以嘲笑它。
class ListLogger : List<string>, ILogger
{
public void LogException(Exception ex)
{
Add(ex.ToString());
}
}
然后在测试“动作”之后,您可以看到预期的异常是否在列表中。