ASP.Net Core集成测试

6

我很难让ASP.Net Core RC2与任何类型的集成测试配合工作。 我创建了一个基本的Web项目,在浏览器中运行良好,显示预期的默认页面。然后我添加了一个新类(在同一项目中),其中包含以下测试代码:

[TestClass]
public class HomeControllerTests
{
    private HttpClient client;

    [TestInitialize]
    public void Initialize()
    {
        // Arrange
        var host = new WebHostBuilder()
           .UseEnvironment("Development")
           .UseKestrel()
           .UseContentRoot(Directory.GetCurrentDirectory())
           .UseIISIntegration()
           .UseStartup<Startup>();

        TestServer server = new TestServer(host);

        client = server.CreateClient();
    }


    [TestMethod]
    public async Task CheckHomeIndex()
    {
        string request = "/";

        var response = await client.GetAsync(request);

        response.EnsureSuccessStatusCode();

        Assert.IsTrue(true);
    }
}

测试未通过,出现以下异常:

未找到视图'Index'。已搜索以下位置:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml

我目前使用的是MSTest而不是xUnit。将ContentRoot更改为“重复”问题中建议的内容,但遗憾的是无法解决该问题。
有没有人成功地运行了集成测试?我已经尝试调整WebHostBuilder设置,但没有成功。

不幸的是,那里提供的解决方案并没有解决问题。我尝试过将ContentRoot更改为该解决方案的根目录,包括wwwroot和其中的所有内容,但没有任何区别。 - Calanus
1个回答

8

我写了一篇关于集成测试(不涉及MVC)的博客文章,'Snow Crash' 发表了类似的评论。他们使用以下代码解决了“未找到”错误:

var path = PlatformServices.Default.Application.ApplicationBasePath;
var setDir = Path.GetFullPath(Path.Combine(path, <projectpathdirectory> ));

var builder = new WebHostBuilder()
   .UseContentRoot(setDir)
   .UseStartup<TStartup>();

博客文章在这里 ASP.NET Core中使用xUnit和TestServer进行集成测试介绍.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接