Mog设置方法未称为[关闭]

问题描述 投票:0回答:1

被称为,在集成测试中,我故意传递一个错误的值来测试错误处理。代码在引发异常之前记录错误,例如

    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记录器的日志。想法?

c# asynchronous moq xunit
1个回答
0
投票

我整理了一个在https://drive.google.com/open?id=1jAmzUjgrHqNCEl_Z6AMFrt8-NHHojeZ8工作的示例项目。处理异步测试时,一定有一些操作员错误(我!)。

© www.soinside.com 2019 - 2024. All rights reserved.