异步单元测试中的单元测试失败断言

时间:2015-05-14 01:42:50

标签: c# unit-testing async-await xunit.net justmock

我正在尝试对一些异步代码进行单元测试。我之前使用的是NUnit,但是想切换到Xunit,但我无法进行一些测试。下面是一些工作NUnit测试的示例代码,我为了提出这个问题而进行了简化:

[TestFixture]
public class Tests
{
    [Test]
    public async Task UsingAsyncTask()
    {
        // Arrange
        PubSubEvent<object> pubSubEvent = Mock.Create<PubSubEvent<object>>();

        // Act
        await Task.Run(() => { pubSubEvent.Publish(new object()); });

        // Assert
        Mock.Assert(() => pubSubEvent.Publish(null), Args.Ignore(), Occurs.Once());
    }
}

添加以下NuGet packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="JustMock" version="2015.1.224.3" targetFramework="net45" />
  <package id="Nito.AsyncEx" version="3.0.0" targetFramework="net45" />
  <package id="NUnit" version="2.6.4" targetFramework="net45" />
  <package id="NUnitTestAdapter" version="2.0.0" targetFramework="net45" />
  <package id="Prism.PubSubEvents" version="1.1.2" targetFramework="net45" />
</packages>

所有这些单元测试都没有问题。所以我在Xunit中尝试了同样的事情:

public class Tests
{
    [Fact]
    public async Task UsingAsyncTask()
    {
        // Arrange
        PubSubEvent<object> pubSubEvent = Mock.Create<PubSubEvent<object>>();

        // Act
        await Task.Run(() => { pubSubEvent.Publish(new object()); });

        // Assert
        Mock.Assert(() => pubSubEvent.Publish(null), Args.Ignore(), Occurs.Once());
    }
}

添加以下NuGet packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="JustMock" version="2015.1.224.3" targetFramework="net45" />
  <package id="Nito.AsyncEx" version="3.0.0" targetFramework="net45" />
  <package id="Prism.PubSubEvents" version="1.1.2" targetFramework="net45" />
  <package id="xunit" version="2.0.0" targetFramework="net45" />
  <package id="xunit.abstractions" version="2.0.0" targetFramework="net45" />
  <package id="xunit.assert" version="2.0.0" targetFramework="net45" />
  <package id="xunit.core" version="2.0.0" targetFramework="net45" />
  <package id="xunit.extensibility.core" version="2.0.0" targetFramework="net45" />
  <package id="xunit.runner.visualstudio" version="2.0.0" targetFramework="net45" />
</packages>

测试在Xunit中失败,表明它正在进行1次呼叫,但已收到0次呼叫。如果我删除任务并同步运行所有内容,则测试通过。

0 个答案:

没有答案