2015-08-31 10 views
5

Używam xUnit 2.0 collection fixtures, aby udostępnić wspólną konfigurację/przerwanie bazy danych między szeregiem różnych klas testowych. Urządzenie zapewnia również pewne właściwości pomocnicze, więc wprowadzam je do każdej klasy testowej.Urządzenie do zbierania nie wstrzyknie

I odtworzył przykład w docs, ale kiedy uruchomić test, nie jest on natychmiast:

następujące parametry konstruktora nie mają pasujący dane osprzętu: IntegrationTestFixture urządzenie

ten Wydaje się, że dzieje się to niezależnie od tego, czy używam xUnit Facts lub Theories, czy też tego, który test biegacza używam.


Oprawa:

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

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

    public string GeneratedTestName { get; private set; } 
} 

definicja Kolekcja:

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

Odpowiedz

3

To był głupi błąd i zajęło mi trochę, aby dowiedzieć się, dlaczego to nie działało:

[CollectionDefinition] przechodzi do klasy definicji kolekcji, ale [Collection] przechodzi do klasy testowej. Byłem na autopilocie i tego nie zauważyłem.

Otrzymasz również to, jeśli masz wiele atrybutów[CollectionDefinition] o tej samej nazwie na różnych klasach. Po prostu użyj jednego!

2

W moim przypadku, zapomniałem dziedziczą IClassFixture interfejsu ...

źle ...

public class DatabaseIntegrationTests 
{ 

Prawidłowe ...

public class DatabaseIntegrationTests : IClassFixture<DatabaseFixture> 
{ 
3

Miałem ten sam błąd, ale dla mnie problem polegał na tym, że zapomniałem stworzyć klasę CollectionDefinitionpublic

Niewłaściwy

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

Prawidłowe

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

W moim przypadku, urządzenie i zbieranie były we wspólnym zespole testowym. Odkryłem, że XUnit DI nie może go znaleźć. Tak więc musiałem zdefiniować urządzenie, które odziedziczyło te klasy we wspólnym zestawie, aby współdzielić funkcjonalność, jednocześnie rejestrując je w moich testowych klasach.

0

Wiele z naszych klas TestFixture ma podobne nazwy. Dlatego upewnij się, że typ urządzenia testowego w definicji pasuje dokładnie do typu przekazanego do konstruktora w klasie zawierającej testy.

Powiązane problemy