I keep getting this error while using XUnit for .NET 1.0 framework net46.
The following constructor parameters did not have matching fixture data
I have seen this post: Collection fixture won't inject and followed the instructions regarding collection fixture closely as described here:
http://xunit.github.io/docs/shared-context.html#collection-fixture
Nothing seems to work.
Any suggestions to what might cause this?
In my case it turned out to be a matter of doing it right according to the instructions. By mistake I had annotated the class with
[Collection("ProjectCollection")]
instead of:
[Collection("ActorProjectCollection")]
I must say that the dependency injection mechanism of XUnit would be greatly improved if the error messages gave more explicit hint of what is wrong.
Another scenario in which this might fail is if the [CollectionDefinition]
is defined on a type outside the executing test assembly. The attribute itself needs to be defined inside of it or xUnit won't pick it up.
This exception may arise when the constructor of your fixture class is failing due to some other problem, in my case connecting to a local Mongo server.
Either look for other failures and solve those first or lighten your constructor up so it does less.
In my case I had to implement the IClassFixture<> interface on the test class.
public class MyTests : IClassFixture<QueryTestFixture>
After I moved the QueryTestFixture to another project the Class attribute stopped working
[Collection("QueryCollection")]
Which was linked to the implementation in the fixture class (see below)
[CollectionDefinition("QueryCollection")]
public class QueryCollection : ICollectionFixture<QueryTestFixture> { }
I had tried many alternative ways to solve this but ended up reading the xunit.net explanation about shared context. which provided a solution.
It happened to me a couple of times just after adding the Collection
and the CollectionDefinition
decorators and I always arrive to this answer when looking on Internet.
But in my case the problem was just that it seems that a 'Clean Solution' action is needed before testing whether it works or not. Without cleaning the solution I always get a The following constructor parameters did not have matching fixture data
error.
So, I write also this answer in order to help my future self.
Anyway, in order to avoid the problem explained by Nikola Schou, you can always use a constant to avoid name mistmatching:
public static class Collections
{
public const string ActorProjectCollection= "ActorProjectCollection";
}
-
[Collection(Collections.ActorProjectCollection)]
/// ...
-
[CollectionDefinition(Collections.ActorProjectCollection)]
/// ...
My two cents: looking at the posted responses I checked the following:
But still not working... What was the problem? The class with the definition has not the public
modifier (class Definition ...
) while the classes using the definition have it.
Just added the public
to the definition, and it worked like a charm.
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