2016-03-10 16 views
6

के साथ निर्भरता इंजेक्शन मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं XUnit के साथ निर्भरता इंजेक्शन का उपयोग कैसे कर सकता हूं। मेरा लक्ष्य मेरी टेस्ट क्लास में मेरे उत्पाद रिपोजिटरी को इंजेक्ट करने में सक्षम होना है।XUnit और ASP.NET कोर 1.0

यहाँ कोड मैं कोशिश कर रहा हूँ है: निम्नलिखित निर्माता मानकों (ICustomerRepository भंडार) स्थिरता डेटा मिलान नहीं था

इस ओर जाता है मुझे विश्वास है:

public class DatabaseFixture : IDisposable 
{ 
    private readonly TestServer _server; 

    public DatabaseFixture() 
    { 
     _server = new TestServer(TestServer.CreateBuilder().UseStartup<Startup>()); 
    } 

    public void Dispose() 
    { 
     // ... clean up test data from the database ... 
    } 
} 

public class MyTests : IClassFixture<DatabaseFixture> 
{ 
    DatabaseFixture _fixture; 
    public ICustomerRepository _repository { get; set; } 

    public MyTests(DatabaseFixture fixture, ICustomerRepository repository) 
    { 
     _fixture = fixture; 
     _repository = repository; 
    } 
} 

यहाँ त्रुटि है कि XUnit निर्भरता इंजेक्शन का समर्थन नहीं करता है, केवल तभी यह स्थिरता है।

क्या कोई मुझे XUnit का उपयोग करके मेरी टेस्ट क्लास में ProductRepository का एक उदाहरण प्राप्त करने का तरीका दे सकता है? मुझे विश्वास है कि मैं एक टेस्ट सर्वर शुरू कर रहा हूं इसलिए Startup.cs DI चलाता है और कॉन्फ़िगर करता है।

उत्तर

7

ठीक है, मुझे नहीं लगता कि एसयूटी के कंटेनर तक पहुंचना संभव है। और ईमानदार होने के लिए मैं बिल्कुल समझ में नहीं आता कि आप क्यों चाहते हैं। आप अपने एसयूटी का पूरा नियंत्रण चाहते हैं। इसका मतलब है कि आप इंजेक्ट करने के लिए अपनी निर्भरता प्रदान करना चाहते हैं।

और वह, आप कर सकते हैं!

_server = new TestServer(TestServer.CreateBuilder(null, app => 
{ 
    app.UsePrimeCheckerMiddleware(); 
}, 
services => 
{ 
    services.AddSingleton<IPrimeService, NegativePrimeService>(); 
    services.AddSingleton<IPrimeCheckerOptions, PrimeCheckerOptions>(); 
})); 

CreateBuilder इसके लिए ओवरलोड प्रदान करता है। आपको उसी कारण से कॉन्फ़िगरेशन और ऐप कॉन्फ़िगरेशन प्रदान करने की आवश्यकता होगी (कारण आप अपने एसयूटी पर पूर्ण नियंत्रण चाहते हैं)। यदि आप रुचि रखते हैं तो उपर्युक्त उदाहरण बनाने के लिए मैंने this आलेख का पालन किया। यदि आप चाहें तो मैं अपने गिटहब में भी नमूना अपलोड कर सकता हूं?

अगर यह मदद करता है तो मुझे बताएं।

अद्यतन GitHub नमूना: https://github.com/DannyvanderKraan/ASPNETCoreAndXUnit

+0

डैनी आप GitHub कि भयानक होगा के लिए एक उदाहरण अपलोड कर सकते हैं यदि। मुझे यह मानना ​​होगा कि मैं अभी भी थोड़ा उलझन में हूं। आइए कहें कि मेरे पास एक आईपॉडक्ट रेपो और एक उत्पाद रेपो है: क्या आप मुझे DI का उपयोग करके ProductRepo का उदाहरण प्राप्त करने के उचित तरीके का उदाहरण दे सकते हैं, इसलिए मैं इसे अपने टेस्ट क्लास में उपयोग कर सकता हूं? –

+0

ब्लेक, मैंने अपना जवाब अपडेट कर लिया है। आप क्या करेंगे, IPrimeService के बजाय, आप IProductRepo लिखेंगे और नकारात्मक PrimeService के बजाय, आप ProductRepo लिखेंगे। आशा है कि अब यह स्पष्ट है। –

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