2016-07-01 22 views
6

Tôi hiện đang nâng cấp một dự án từ .NET Core RC1 lên phiên bản RTM 1.0 mới. Trong RC1, có một IApplicationEnvironment được thay thế bằng IHostingEnvironment trong phiên bản 1.0Đặt IHostingEnvironment trong thử nghiệm đơn vị

trong RC1 tôi có thể làm điều này

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

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

Có ai biết làm thế nào để đạt được điều này trong v1.0?

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

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

Bạn có thể chỉ thử nó trong các thử nghiệm đơn vị bằng cách thực hiện giao diện . –

Trả lời

1

Nói chung, vì IHostingEnvironment chỉ là một giao diện, bạn có thể chỉ đơn giản là giả lập nó để trả lại bất cứ điều gì bạn muốn.

Nếu bạn đang sử dụng TestServer trong các thử nghiệm của mình, cách tốt nhất để thử là sử dụng phương thức WebHostBuilder.Configure. Một cái gì đó như thế này:

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

Tôi không muốn sử dụng lớp TestServer. Đó là nhiều hơn cho thử nghiệm tích hợp tôi tin. Tôi không cần phải quay lên một ví dụ hoàn chỉnh của ứng dụng. Tôi chỉ muốn thử một lớp học cụ thể. Những gì tôi có là một lớp cơ sở thử nghiệm được sử dụng 'ApplicationEnvironment' trong RC1, nhưng tôi dường như không thể thay thế nó một cách dễ dàng trong 1.0 –

+0

Vậy tại sao bạn không thích chỉ cần giả lập nó? HostingEnvironment = Set

5

Bạn có thể thử các IHostEnvironment sử dụng một khuôn khổ mocking nếu cần thiết hoặc tạo ra một phiên bản giả mạo bằng cách thực hiện giao diện.

tặng một lớp như thế này ...

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

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

Bạn có thể thiết lập một ví dụ đơn vị thử nghiệm sử dụng 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 
}