2

如题所述,为什么Asserts: 0在我的NUnit Android Test Runner中,虽然Assert在对应的测试方法中调用了两个s,却显示出来了?只是好奇我是否以错误的方式进行断言,或者显示的信息可能与我认为的完全不同。

在此处输入图像描述

测试方法如下。两条线上的断点Assert按预期命中。

[Test]
public async Task TestDeleteHistoryShouldEmptyTable()
{
    var newBookmark = new Bookmark
    {
        Id = "foo",
        Page = 100,
        CreatedBy = "john doe",
        CreatedDate = DateTime.Now
    };
    await _mainVM.Repo.SaveAsync(newBookmark);
    var historyBefore = await _mainVM.Repo.GetLatestBookmarksAsync(Helpers.HistorySize);
    Assert.True(historyBefore.Any());

    await _mainVM.Repo.ClearTable("Bookmark");
    var historyAfter = await _mainVM.Repo.GetLatestBookmarksAsync(Helpers.HistorySize);
    Assert.True(!historyAfter.Any());
}

更新 :

也可以使用以下测试方法重现该问题:

[Test]
public async Task TestAsyncCounter()
{
    await FakeAsyncMethod();
    Assert.True(true);
}

public async Task FakeAsyncMethod()
{
    await Task.Delay(1000);
}
4

1 回答 1

2

事实证明这是一个框架错误,正如@CharliePoole所证实的那样,他们的问题跟踪器中的 NUnit 维护者之一:

“好的,我必须收回最后一条评论。当等待的方法本身不包含等待并因此同步处理时,它可以正常工作。当我包含await Task.Delay(1)在等待的方法中时,我看到了奇怪的结果。所以肯定有一个框架错误,甚至可以在 .NET 4.5 中看到。”

现在让我们等待问题跟踪器中的更新。


更新问题跟踪链接:https ://github.com/nunit/nunit/issues/1499

于 2016-05-17T03:55:47.000 回答