为什么在NUnit Android Test Runner中Asserts等于0(零)?

时间:2016-05-15 10:26:34

标签: c# xamarin xamarin.android nunit-3.0

正如标题中所提到的,为什么在我的NUnit Android Test Runner中显示Asserts: 0,尽管在相应的测试方法中有两个Assert被调用?只是好奇我是否以错误的方式做断言,或者显示的信息可能与我的想法完全不同。

enter image description here

测试方法如下所示。两条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);
}

1 个答案:

答案 0 :(得分:2)

这被证明是一个框架错误,由@CharliePoole确认,他是issue tracker中的NUnit维护者之一:

  

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

让我们暂时等待问题跟踪器中的更新。

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