2015-10-02 13 views
3

如何设置视图引擎在ASP.NET MVC 6TestServer创建测试主机工作。我试图实现从trick回购MVC 6设置在ASP.NET MVC6视图引擎在单位与AspNet.TestHost.TestServer工作测试

[Fact] 
public async Task CallMvc() 
{ 
    var client = GetTestHttpClient(); 

    //call to HomeController.Index to get Home/Index.cshtml content 
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "/"); 

    var response = await client.SendAsync(request); 
    var content = await response.Content.ReadAsStringAsync(); 
    PAssert.IsTrue(() => content != null); 
} 

private HttpClient GetTestHttpClient(Action<IServiceCollection> configureServices = null) 
{ 
    var applicationServices = CallContextServiceLocator.Locator.ServiceProvider; 
    var applicationEnvironment = applicationServices.GetRequiredService<IApplicationEnvironment>(); 
    var libraryManager = applicationServices.GetRequiredService<ILibraryManager>(); 
    var startupAssembly = typeof(Startup).Assembly; 

    var applicationName = startupAssembly.GetName().Name; 
    var library = libraryManager.GetLibraryInformation(applicationName); 
    var applicationRoot = Path.GetDirectoryName(library.Path); 

    var hostingEnvironment = new HostingEnvironment() 
    { 
     WebRootPath = applicationRoot 
    }; 

    var loggerFactory = new LoggerFactory(); 

    var startup = new Startup(); 

    Action<IServiceCollection> configureServicesAction = services => 
    { 
     services.AddInstance(applicationEnvironment); 
     services.AddInstance<IHostingEnvironment>(hostingEnvironment); 

     // Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd(). 
     var assemblyProvider = new FixedSetAssemblyProvider(); 
     assemblyProvider.CandidateAssemblies.Add(startupAssembly); 
     services.AddInstance<IAssemblyProvider>(assemblyProvider); 

     startup.ConfigureServices(services); 
    }; 

    Action<IApplicationBuilder> configureApp = _ => startup.Configure(_, hostingEnvironment, loggerFactory); 
    var server = TestServer.Create(configureApp, configureServicesAction); 
    var httpClient = server.CreateClient(); 

    return httpClient; 
} 

启动类只是最简单的设置为MVC:

public class Startup 
{ 
    // This method gets called by the runtime. Use this method to add services to the container. 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // Add MVC services to the services container. 
     services.AddMvc(); 
    } 

    // Configure is called after ConfigureServices is called. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    {  
     // Add MVC to the request pipeline. 
     app.UseMvc(routes => 
     { 
      routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 
} 

我越来越​​并在内部它无法找到索引。 cshtml视图。所有路径 下面下面的单元测试库路径或DNX路径:

var applicationBasePath = _appEnvironment.ApplicationBasePath; 
var webRootPath = _env.WebRootPath; 
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; 

什么方式来设置视图引擎和环境,从使用TestServer单元测试工作?

回答

0

你定义不同环境的想法是要在正确的方向。

我已经看到了这一个相当完美的解决方案通过使用扩展方法:

https://github.com/bartmax/TestServerMvcHelper

它甚至上的NuGet,但我不能让它从那里工作。 Propably您可以将两个类MvcTestApplicationEnvironment.csWebHostBuilderExtensions.cs到您的解决方案。

然后您可设置TESTSERVER通过使用这样的:

var builder = TestServer.CreateBuilder(); 
builder.UseStartup<Startup>() 
    .UseEnvironment("Testing") 
    .UseApplicationPath("YourMvcApplication"); 
var server = new TestServer(builder);