2017-03-11 2 views
3

Verwenden von Microsoft.aspnetcore.testhost Ich kann http nicht zu Controller-Aktion Rückkehr Rasierer sehen. Ich muss die Antwort prüfen hat spezifische Sicherheitsheader und andere Tests, die ich auf den Aktionsantworten ausführen möchte. Razor wirft Kompilation Ausnahmen für jeden Namespace trifft es, nicht nur das System folgendes Beispiel:Testen von asp.net Core 1.1 mvc Aktionen Wiederherstellen von Rasiermesser Ansichten mit microsoft.aspnetcore.testhost

oclq12bb.ugz(5,11): error CS0246: The type or namespace name 'System' could 
not be found (are you missing a using directive or an assembly reference?) 
oclq12bb.ugz(6,11): error CS0246: The type or namespace name 'System' could 
not be found (are you missing a using directive or an assembly reference?) 

Repro:

  • Visual Studio 2017 erstellen Sie einen neuen asp.net Kern 1.1 Webprojekt und füge ein .net Kerneinheitstestprojekt.
  • Entfernen Sie die Appsettings vom Start.
  • Legen Sie die Ansicht /home/index.cshtml fest, um in das Ausgabeverzeichnis zu kopieren und "immer kopieren" zu verwenden.
  • erstellen und führen Sie Unit-Test. Löst Ausnahme aus.

Code:

[TestClass] 
public class UnitTest1 
{ 
    private readonly HttpClient _client; 

    public UnitTest1() 
    { 
     var server = new TestServer(
      new WebHostBuilder().UseStartup<Startup>()); 
     _client = server.CreateClient(); 
    } 

    [TestMethod] 
    public async Task Test1() 
    { 
     var response = await _client.GetAsync("/"); 
    } 
} 

Ich habe versucht, das Web-Projekt in einen Ordner zu veröffentlichen und die .UseContentRoot mit() anstelle von Kopie immer. Gleiches Ergebnis.

+1

https://github.com/aspnet/Hosting/issues/954 – longday

Antwort

4

Der Kommentar des Longday hat tatsächlich für mich gearbeitet. Um diese Frage beantwortet und nützlicher für andere zu machen, lassen Sie mich den eigentlichen Code schreiben, der funktioniert. Dies ist mein Code von meinem Projekt, aber es ist sehr generisch.

using System.IO; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Reflection; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Mvc.Razor; 
using Microsoft.AspNetCore.TestHost; 
using Microsoft.CodeAnalysis; 
using Microsoft.Extensions.DependencyInjection; 
using Microsoft.Extensions.PlatformAbstractions; 
using Shevastream.Models; 
using Shevastream.Services.Factories; 
using Xunit; 

namespace Shevastream.Tests.IntegrationTests 
{ 
    public class PagesTests 
    { 
     /// <summary> 
     /// Server object which mimics a real running server 
     /// </summary> 
     private readonly TestServer _server; 
     /// <summary> 
     /// Client object which mimics a real client 
     /// </summary> 
     private readonly HttpClient _client; 

     private readonly IDataContext _dataContext; 

     /// <summary> 
     /// Setup mock server and client 
     /// </summary> 
     public PagesTests() 
     { 
      var path = PlatformServices.Default.Application.ApplicationBasePath; 
      var contentPath = Path.GetFullPath(Path.Combine(path, [email protected]"../../../../src")); 

      _server = new TestServer(
       new WebHostBuilder() 
        .UseContentRoot(contentPath) 
        .UseStartup<Startup>() 
        .ConfigureServices(services => 
        { 
         services.AddSingleton<IHttpClientFactory, HttpClientFactory>(); 
         services.Configure((RazorViewEngineOptions options) => 
         { 
          var previous = options.CompilationCallback; 
          options.CompilationCallback = (context) => 
          { 
           previous?.Invoke(context); 

           var assembly = typeof(Startup).GetTypeInfo().Assembly; 
           var assemblies = assembly.GetReferencedAssemblies().Select(x => MetadataReference.CreateFromFile(Assembly.Load(x).Location)) 
           .ToList(); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Private.Corelib")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Razor")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Private.Corelib")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Linq")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Threading.Tasks")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Runtime")).Location)); assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Dynamic.Runtime")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Razor.Runtime")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Mvc")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Razor")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Mvc.Razor")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Html.Abstractions")).Location)); 
           assemblies.Add(MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Text.Encodings.Web")).Location)); 

           context.Compilation = context.Compilation.AddReferences(assemblies); 
          }; 
         }); 
        }) 
      ); 

      _client = _server.CreateClient(); 

      var serviceProvider = Extensions.RegisterServices().BuildServiceProvider(); 
      _dataContext = serviceProvider.GetRequiredService<IDataContext>(); 
     } 

     [Theory] 
     [InlineData("/home")] 
     [InlineData("/home/profile")] 
     [InlineData("/store/product")] 
     [InlineData("/home/contact")] 
     [InlineData("/store/cart")] 
     [InlineData("/home/faq")] 
     [InlineData("/account/login")] 
     public async Task TestSimplePages(string url) 
     { 
      // Act 
      var ok = await _client.GetAsync(url); 

      // Assert 
      Assert.Equal(HttpStatusCode.OK, ok.StatusCode); 
     } 
    } 
} 
Verwandte Themen