When I use the TestServer to call an MVC endpoint to check that the view renders, it results in a HTTP 500 Internal Server Error response.
The error is:
An error occurred during the compilation of a resource required to process this request. Please review the following specific error details and modify your source code appropriately.
/CustomSubfolder/Views/_ViewImports.cshtml
One or more compilation references are missing. Possible causes include a missing 'preserveCompilationContext' property under 'buildOptions' in the application's project.json.
The type or namespace name 'MyNamespace' does not exist in the namespace 'Company.App' (are you missing an assembly reference?)
Test code:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
namespace MvcProject.Tests
{
[TestClass]
public class ControllerTests
{
protected TestServer Server { get; }
protected HttpClient Client { get; }
public ControllerTests()
{
Server = new TestServer(new WebHostBuilder()
.UseContentRoot("../../../../MvcProject")
.UseStartup<Startup>());
Client = Server.CreateClient();
}
[TestMethod]
public async Task Action_Valid_Renders()
{
HttpResponseMessage response = await Client.GetAsync("http://localhost/");
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
}
I'm using ASP.NET Core 1.1 targeting .NET Framework 4.6.1, and my MSTest .csproj file looks like:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MvcProject\MvcProject.csproj" />
</ItemGroup>
</Project>