【发布时间】:2017-04-21 23:00:41
【问题描述】:
我有一个方法:
public class MyClass
{
public ILogger _logger;
public async void TestLogMethod(string msg)
{
await Task.Run(async ()=> await _logger.Log(msg));
}
}
还有一个测试用例:
[Test]
public async Task TestLogMethod_LogMessage_Test()
{
var fakeLogger = A.Fake<ILogger>();
var testClass = new MyClass();
testClass._logger = fakeLogger;
testClass.TestLogMethod("Test Message");
A.CallTo(() => fakeLogger.Log(A<string>._)).MustHaveHappened();
}
MustHaveHappened Assert 总是说失败
以下调用的断言失败:
MyClass.TestLogMethod( )
预计至少会找到一次,但没有调用假对象。
很明显_logger.Log()被调用了,但是为什么这里总是断言失败?
【问题讨论】:
-
你能先解释一下为什么你有一个
async void方法等待一个新任务,它等待另一个任务吗? -
在我关于async best practices 的文章中,我提到了避免使用
async void方法的几个原因;其中之一是“Async void 方法很难测试。”
标签: c# multithreading nunit fakeiteasy