現在、プロジェクトを.NET Core RC1から新しいRTM 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 = ???????????;
}
}
必要に応じてモックフレームワークを使用して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
}
一般に、IHostingEnvironmentは単なるインターフェイスであるため、単純にモックして、必要なものを返すことができます。
テストでTestServerを使用している場合、モックを作成する最善の方法はWebHostBuilder.Configureメソッドを使用することです。このようなもの:
var testHostingEnvironment = new MockHostingEnvironment();
var builder = new WebHostBuilder()
.Configure(app => { })
.ConfigureServices(services =>
{
services.TryAddSingleton<IHostingEnvironment>(testHostingEnvironment);
});
var server = new TestServer(builder);