2015-08-31 10 views
5

इंजेक्ट नहीं करेगा I कई अलग-अलग परीक्षण कक्षाओं के बीच एक सामान्य डेटाबेस सेटअप/टियरडाउन साझा करने के लिए xUnit 2.0 collection fixtures का उपयोग कर रहा हूं। स्थिरता कुछ सहायक गुण भी प्रदान करती है, इसलिए मैं इसे प्रत्येक टेस्ट क्लास में इंजेक्शन दे रहा हूं।संग्रह स्थिरता

मैं डॉक्स में उदाहरण निर्मित, लेकिन जब मैं परीक्षण चलाने के लिए, इसके साथ तुरंत विफल रहता है: IntegrationTestFixture स्थिरता

यह:

निम्नलिखित निर्माता मापदंडों से मेल खाते स्थिरता डेटा प्राप्त नहीं हुआ ऐसा लगता है कि मैं xUnit तथ्य या सिद्धांतों का उपयोग कर रहा हूं, या मैं कौन सा परीक्षण धावक उपयोग कर रहा हूं।


स्थिरता:

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

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

    public string GeneratedTestName { get; private set; } 
} 

संग्रह परिभाषा:

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

टेस्ट:

[CollectionDefinition("Live tests")] 
public class SomeTests 
{ 
    private readonly IntegrationTestFixture fixture; 

    public SomeTests(IntegrationTestFixture fixture) 
    { 
     this.fixture = fixture; 
    } 

    [Fact] 
    public void MyTestMethod() 
    { 
     // ... test here 
    } 
} 

उत्तर

3

यह एक मूर्खतापूर्ण त्रुटि थी और यह मेरे एक सा ले लिया उसका जानने के लिए यह काम नहीं कर रहा था:

[CollectionDefinition] संग्रह परिभाषा वर्ग पर जाता है, लेकिन [Collection] परीक्षण कक्षा पर जाता है। मैं ऑटोपिलोट पर था और यह ध्यान नहीं दिया।

यदि आप एकाधिक[CollectionDefinition] विभिन्न वर्गों पर एक ही नाम के साथ विशेषताएँ हैं तो आपको यह भी मिल जाएगा। बस एक का उपयोग करें!

2

मेरे मामले में, मैं IClassFixture इंटरफ़ेस से विरासत करना भूल गया ...

गलत ...

public class DatabaseIntegrationTests 
{ 

सही ...

public class DatabaseIntegrationTests : IClassFixture<DatabaseFixture> 
{ 
3

मैं एक ही त्रुटि थी, लेकिन मेरे लिए मुद्दा यह था कि मैं CollectionDefinition कक्षा public उदाहरण बनाना भूल गया था

गलत

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

सही

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

मेरे मामले में, स्थिरता और संग्रह एक साझा परीक्षण विधानसभा में थे। मैंने पाया कि XUnit DI इसे नहीं मिला। इसलिए, मुझे एक ऐसी स्थिरता को परिभाषित करना पड़ा जो साझा परीक्षण में उन वर्गों को विरासत में मिला, ताकि वे मेरे परीक्षण कक्षाओं में पंजीकरण करने के दौरान कार्यक्षमता साझा कर सकें।

0

हमारे टेस्टफिक्चर कक्षाओं में से कई समान नाम हैं। इसलिए परीक्षण युक्त वर्ग पर कन्स्ट्रक्टर में पारित प्रकार के साथ परिभाषा मिलान पर परीक्षण स्थिरता प्रकार सुनिश्चित करें।

संबंधित मुद्दे