2016-07-01 14 views
6

में IHostingEnvironment सेट करें मैं वर्तमान में .NET कोर आरसी 1 से नए आरटीएम 1.0 संस्करण में एक प्रोजेक्ट को अपग्रेड कर रहा हूं। RC1 में, वहाँ एक IApplicationEnvironment जो संस्करण में IHostingEnvironment से बदला गया 1.0यूनिट परीक्षण

RC1 में मैं कर सकता था इस

public class MyClass 
{ 
    protected static IApplicationEnvironment ApplicationEnvironment { get;private set; } 

    public MyClass() 
    { 
     ApplicationEnvironment = PlatformServices.Default.Application; 
    } 
} 

किसी को भी कैसे v1.0 में इस लक्ष्य को हासिल करने के लिए पता है?

public class MyClass 
{ 
    protected static IHostingEnvironment HostingEnvironment { get;private set; } 

    public MyClass() 
    { 
     HostingEnvironment = ???????????; 
    } 
} 
+1

तुम बस यह इकाई परीक्षण में इंटरफ़ेस को लागू करने से नकली सकता है कर सकते हैं । –

उत्तर

1

सामान्य रूप से, जैसे IHostingEnvironment केवल एक इंटरफ़ेस है, आप इसे जो कुछ भी चाहते हैं उसे वापस करने के लिए बस इसे मॉक कर सकते हैं।

यदि आप अपने परीक्षणों में टेस्टसेवर का उपयोग कर रहे हैं, तो नकली करने का सबसे अच्छा तरीका WebHostBuilder.Configure विधि का उपयोग करना है। कुछ इस तरह:

var testHostingEnvironment = new MockHostingEnvironment(); 
var builder = new WebHostBuilder() 
      .Configure(app => { }) 
      .ConfigureServices(services => 
      { 
       services.TryAddSingleton<IHostingEnvironment>(testHostingEnvironment); 
      }); 
var server = new TestServer(builder); 
+0

मैं टेस्टसेवर क्लास का उपयोग नहीं करना चाहता हूं। मेरा मानना ​​है कि एकीकरण परीक्षण के लिए यह और अधिक है। मुझे ऐप का पूरा उदाहरण स्पिन करने की आवश्यकता नहीं है। मैं सिर्फ एक विशेष कक्षा का परीक्षण करना चाहता हूं। मेरे पास एक टेस्ट बेस क्लास है जो आरसी 1 में 'एप्लिकेशन एन्वायरमेंट' का इस्तेमाल करती है, लेकिन मैं 1.0 –

+0

में आसानी से इसे प्रतिस्थापित नहीं कर सकता, तो आप इसे क्यों मजाक करना पसंद नहीं करते? होस्टिंगइन्वायरमेंट = के आपके नकली कार्यान्वयन – Set

5

आप IHostEnvironment एक मजाक ढांचे का उपयोग कर यदि आवश्यक हो तो नकली या इंटरफ़ेस को लागू करने से एक नकली संस्करण बना सकते हैं।

इस तरह एक वर्ग दें ...

public class MyClass { 
    protected IHostingEnvironment HostingEnvironment { get;private set; } 

    public MyClass(IHostingEnvironment host) { 
     HostingEnvironment = host; 
    } 
} 

आप सेटअप एक इकाई परीक्षण उदाहरण Moq का उपयोग कर ...

public void TestMyClass() { 
    //Arrange 
    var mockEnvironment = new Mock<IHostingEnvironment>(); 
    //...Setup the mock as needed 
    mockEnvironment 
     .Setup(m => m.EnvironmentName) 
     .Returns("Hosting:UnitTestEnvironment"); 
    //...other setup for mocked IHostingEnvironment... 

    //create your SUT and pass dependencies 
    var sut = new MyClass(mockEnvironment.Object); 

    //Act 
    //...call you SUT 

    //Assert 
    //...assert expectations 
} 
संबंधित मुद्दे