我正在尝试对一些异步代码进行单元测试。我之前使用的是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次呼叫。如果我删除任务并同步运行所有内容,则测试通过。