2015-08-31 18 views
5

Ich benutze XUnit 2.0 collection fixtures, um eine gemeinsame Datenbank Setup/Teardown zwischen einer Reihe von verschiedenen Testklassen zu teilen. Das Fixture stellt auch einige Helfereigenschaften zur Verfügung, also injiziere ich es in jede Testklasse.Collection Fixture wird nicht injizieren

ich das Beispiel in der Dokumentation neu erstellt, aber wenn ich den Test ausführen, es nicht sofort mit:

Folgende Konstruktorparameter haben nicht passende Fixturedaten: IntegrationTestFixture Befestigung

Diese scheint unabhängig davon zu passieren, ob ich xUnit Fakten oder Theorien verwende oder welchen Testläufer ich verwende.


Fixture:

public class IntegrationTestFixture : IDisposable 
{ 
    public IntegrationTestFixture() 
    { 
     // (setup code) 
     this.GeneratedTestName = [randomly generated]; 
    } 

    public void Dispose() 
    { 
     // (teardown code) 
    } 

    public string GeneratedTestName { get; private set; } 
} 

Sammlung 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 
    } 
} 

Antwort

3

Das war ein dummer Fehler, und es hat mich ein bisschen um herauszufinden, warum Es funktionierte nicht:

[CollectionDefinition] geht auf die Sammlung Definitionsklasse, aber [Collection] geht auf die Testklasse. Ich war auf Autopilot und habe das nicht bemerkt.

Sie erhalten dies auch, wenn Sie mehrere[CollectionDefinition] Attribute mit dem gleichen Namen für verschiedene Klassen haben. Benutze einfach eins!

2

In meinem Fall habe ich vergessen, von IClassFixture Schnittstelle zu erben ...

Wrong ...

public class DatabaseIntegrationTests 
{ 

Correct ...

public class DatabaseIntegrationTests : IClassFixture<DatabaseFixture> 
{ 
3

ich den gleichen Fehler hatte, aber für mich war das Problem, dass ich vergessen hatte, die CollectionDefinition Klasse public zB zu machen

Wrong

[CollectionDefinition("Live tests")] 
class IntegrationTestCollection : ICollectionFixture<IntegrationTestFixture> 
{ 
    // Intentionally left blank. 
    // This class only serves as an anchor for CollectionDefinition. 
} 

Correct

[CollectionDefinition("Live tests")] 
public class IntegrationTestCollection : ICollectionFixture<IntegrationTestFixture> 
{ 
    // Intentionally left blank. 
    // This class only serves as an anchor for CollectionDefinition. 
} 
3

In meinem Fall, die Halterung und Sammel waren in einer gemeinsamen Testanordnung. Ich habe festgestellt, dass XUnit DI es nicht finden konnte. Also musste ich ein Fixture definieren, das diese Klassen in der freigegebenen Assembly geerbt hat, um die Funktionalität zu teilen, während es in meinen Testklassen registriert wird.

0

Viele unserer TestFixture-Klassen haben ähnliche Namen. Stellen Sie also sicher, dass der Typ der Testvorrichtung in der Definition genau mit dem Typ übereinstimmt, der an den Konstruktor der Klasse mit den Tests übergeben wurde.