2016-07-01 9 views
6

Ich aktualisiere derzeit ein Projekt von .NET Core RC1 auf die neue RTM 1.0-Version. In RC1 gab es ein IApplicationEnvironment, die mit IHostingEnvironment in der Version 1.0Setzen Sie die IHostingEnvironment in Komponententest

In RC1 ersetzt wurde ich dies tun könnte

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

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

Wer weiß, wie dies in v1.0 zu erreichen?

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

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

Man konnte es nur in der Unit-Test verspotten die Schnittstelle durch die Umsetzung . –

Antwort

1

Im Allgemeinen, da IHostingEnvironment nur eine Schnittstelle ist, können Sie es einfach verspotten, um zurückzukehren, was auch immer Sie wollen.

Wenn Sie TestServer in Ihren Tests verwenden, sollten Sie die WebHostBuilder.Configure-Methode am besten ausprobieren. Etwas wie folgt aus:

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

Ich möchte nicht die TestServer-Klasse verwenden. Das ist mehr für Integrationstests, glaube ich. Ich muss keine vollständige Instanz der App hochfahren. Ich möchte nur eine bestimmte Klasse testen. Was ich habe, ist eine Test-Basis-Klasse, die 'ApplicationEnvironment' in RC1 verwendet, aber ich kann es nicht einfach in 1.0 –

+0

ersetzen So warum möchten Sie es nicht nur verspotten? HostingEnvironment = Set

5

können Sie die IHostEnvironment verspotten einen Mockframework zu verwenden, wenn eine gefälschte Version durch die Implementierung der Schnittstelle benötigt oder erstellen.

eine Klasse wie das Geben ...

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

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

Sie können ein Unit-Test-Beispiel-Setup Moq mit ...

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 
} 
Verwandte Themen