Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xunit The following constructor parameters did not have matching fixture data

Tags:

.net

xunit

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?

like image 891
Nikola Schou Avatar asked Sep 11 '16 21:09

Nikola Schou


6 Answers

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.

like image 89
Nikola Schou Avatar answered Oct 05 '22 20:10

Nikola Schou


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.

like image 27
Jeroen Vannevel Avatar answered Oct 05 '22 20:10

Jeroen Vannevel


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.

like image 42
Luke Puplett Avatar answered Oct 05 '22 20:10

Luke Puplett


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.

like image 26
PunkTurnet Avatar answered Oct 05 '22 20:10

PunkTurnet


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)]
/// ...
like image 20
artberri Avatar answered Oct 05 '22 19:10

artberri


My two cents: looking at the posted responses I checked the following:

  • CollectionDefinition(X) and Collection(X) classes are in the same assembly
  • Both the definition and the classes using it refer to the same collection name
  • The classes using the definition have a constructor receiving the fixture

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.

like image 23
RDM Avatar answered Oct 05 '22 19:10

RDM