被调用,并且在集成测试中,我故意传递一个错误的值来测试错误处理。代码在引发异常之前记录错误,例如
var tokenResponse = await Client.ExecuteAsync<TokenResponse>(TokenRequest);
var typeString = typeof(GetAccountObjectRequest).Name;
if (!ResourceDictionary.ContainsKey(typeString))
{
Logger.LogError($"{typeString} was not found in the resource dictionary");
throw new InvalidProgramException($"{typeString} was not found in the resource dictionary");
}
要捕获并记录此消息,我已将“ logger”设置为:
mockLogger.Setup(foo => foo.LogError(It.IsAny<object>()))
.Callback<object>((msg) =>
{
System.Diagnostics.Debug.WriteLine(msg);
});
最终像这样调用测试:
Assert.ThrowsAsync<InvalidProgramException>(async () => await command.GetAccountObject("xxx"));
所以我期望的是将错误消息记录到调试控制台。相反,似乎从未调用过此方法。我开始仔细观察,发现我没有回来
var tokenResponse = await Client.ExecuteAsync<TokenResponse>(TokenRequest);
如上所示。测试通过,因为我正在做的唯一断言是引发了“ InvalidProgramExecution”异常。我在有问题的那一行周围放了一个try / catch块
var tokenResponse = await Client.ExecuteAsync<TokenResponse>(TokenRequest);
据我所知,没有异常是从该行返回,并且该行显然永远不会返回,但是当我在该行上添加断点并仅执行该行时,Visual Studio就会停止,就好像抛出了预期的异常一样。在模拟的界面中,我希望看到引发异常并将消息传递到各种Logger记录器的日志。想法?
答案 0 :(得分:0)
我整理了一个在https://drive.google.com/open?id=1jAmzUjgrHqNCEl_Z6AMFrt8-NHHojeZ8工作的示例项目。处理异步测试时一定有一些操作员错误(我!)。