I'm using xUnit 2.0 collection fixtures to share a common database setup/teardown between a number of different test classes. The fixture also provides some helper properties, so I'm injecting it into each test class.
I recreated the example in the docs, but when I run the test, it fails immediately with:
The following constructor parameters did not have matching fixture data: IntegrationTestFixture fixture
This seems to happen regardless of whether I'm using xUnit Facts or Theories, or which test runner I'm using.
Fixture:
public class IntegrationTestFixture : IDisposable
{
public IntegrationTestFixture()
{
// (setup code)
this.GeneratedTestName = [randomly generated];
}
public void Dispose()
{
// (teardown code)
}
public string GeneratedTestName { get; private set; }
}
Collection definition:
[CollectionDefinition("Live tests")]
public class IntegrationTestCollection : ICollectionFixture<IntegrationTestFixture>
{
// Intentionally left blank.
// This class only serves as an anchor for CollectionDefinition.
}
Test:
[CollectionDefinition("Live tests")]
public class SomeTests
{
private readonly IntegrationTestFixture fixture;
public SomeTests(IntegrationTestFixture fixture)
{
this.fixture = fixture;
}
[Fact]
public void MyTestMethod()
{
// ... test here
}
}
This was a silly error and it took me a bit to figure out why it wasn't working:
[CollectionDefinition]
goes on the collection definition class, but [Collection]
goes on the test class. I was on autopilot and didn't notice this.
You'll also get this if you have multiple [CollectionDefinition]
attributes with the same name on different classes. Just use one!
In my case, the fixture and collection were in a shared testing assembly. I found that XUnit DI could not find it. So, I had to define a fixture that inherited those classes in the shared assembly to both share the functionality while getting it to register in my test classes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With