Reputation: 929
I am trying to unit test some async code. I was previously using NUnit but would like to switch to Xunit but I can't get some tests working. Here is some example code for some working NUnit tests that I simplified for the sake of asking this question:
[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());
}
}
Add the following 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>
All of these unit tests pass without a problem. So I try the same thing in 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());
}
}
Add the following 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>
The test fails in Xunit indicating that it is expecting 1 call but has received 0 calls. If I remove the task and run everything synchronously the test passes.
Upvotes: 3
Views: 518