Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我需要Razor pages依赖项来为.NET核心Web Api编写集成测试?_C#_Asp.net Core_Asp.net Core Mvc_Integration Testing_Asp.net Core Webapi - Fatal编程技术网

C# 为什么我需要Razor pages依赖项来为.NET核心Web Api编写集成测试?

C# 为什么我需要Razor pages依赖项来为.NET核心Web Api编写集成测试?,c#,asp.net-core,asp.net-core-mvc,integration-testing,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Mvc,Integration Testing,Asp.net Core Webapi,我正在尝试为我正在构建的.NET核心Web Api编写集成测试 根据找到的文档,我通过Nuget引用了Microsoft.AspNetCore.App和Microsoft.AspNetCore.Mvc.Testing的包 但是,当我尝试运行测试时,出现异常,并显示以下消息: 消息:System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.AspNetCore.Razor.Runtime,版本=2.1.1.0,区域性=中性,PublicKeyToke

我正在尝试为我正在构建的.NET核心Web Api编写集成测试

根据找到的文档,我通过Nuget引用了Microsoft.AspNetCore.App和Microsoft.AspNetCore.Mvc.Testing的包

但是,当我尝试运行测试时,出现异常,并显示以下消息:

消息:System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.AspNetCore.Razor.Runtime,版本=2.1.1.0,区域性=中性,PublicKeyToken=adb9793829ddae60”。系统找不到指定的文件

这听起来像是因为缺少Razor pages依赖项而抱怨?我的Api不使用Razor页面。为什么我需要这种依赖?我做错什么了吗

另请注意:
Microsoft.AspNetCore.Mvc.Testing
Microsoft.AspNetCore.TestHost
之间有什么不同?前者在我上面链接的文档页面中提到,后者在同一页面的测试控制器标题下提到,几乎没有解释

编辑:我已使用Nuget在错误消息Microsoft.AspNetCore.Razor.Runtime中安装了请求的软件包,但仍然收到相同的错误。现在我真的很困惑

编辑2:根据要求,测试项目的.csproj文件

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Runtime" Version="2.2.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
    <PackageReference Include="xunit" Version="2.3.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Api\Api.csproj" />
  </ItemGroup>

</Project>

netcoreapp2.1
假的
我的测试设置如下所示:

public class StartupIntegrationTests
    : IClassFixture<WebApplicationFactory<Startup>>
{
    private readonly WebApplicationFactory<Startup> _webAppFactory;

    public StartupIntegrationTests(WebApplicationFactory<Startup> webAppFactory)
    {
        _webAppFactory = webAppFactory.WithWebHostBuilder(builder => builder
            .UseStartup<Startup>()
            .UseSetting("https_port", "443"));
    }


    [Theory]
    [InlineData("/Users")]
    public async Task ShouldUseHttpsForAllRequestsIfClientDidAutoRedirect(string url)
    {
        var client = _webAppFactory.CreateClient();
        var response = await client.GetAsync(url);

        // Ensure that the returned URL is an https url and that there were no errors
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        Assert.StartsWith("https://localhost:443/",
                          response.RequestMessage.RequestUri.OriginalString);
    }


    // Some more tests omitted to keep things short

}
公共类StartupIntegrationTests
:IClassFixture
{
私有只读WebApplicationFactory\u webAppFactory;
公共StartupIntegrationTests(WebApplicationFactoryWebAppFactory)
{
_webAppFactory=webAppFactory.WithWebHostBuilder(builder=>builder
.UseStartup()
.UseSetting(“https_端口”、“443”);
}
[理论]
[在线数据(“/Users”)]
公共异步任务应使用HttpSforallRequestSifClientDidAutoRedirect(字符串url)
{
var client=_webAppFactory.CreateClient();
var response=wait client.GetAsync(url);
//确保返回的URL是https URL并且没有错误
Assert.Equal(HttpStatusCode.OK,response.StatusCode);
Assert.StartsWith(“https://localhost:443/",
response.RequestMessage.RequestUri.OriginalString);
}
//为了缩短时间,又省略了一些测试
}

这可能是由于2.1和2.2之间的版本不匹配:您通过
netcoreapp2.1以.NET Core 2.1为目标,但包含2.2.0包。将NuGet软件包降级至2.1.x版本或将应用程序升级至2.2.0:

  • 从下载.NET Core 2.2 SDK
  • 将应用程序的目标框架从
    netcoreapp.2.1
    更新为
    netcoreapp2.2
    netcoreapp2.1
    。确保对应用程序和测试应用程序都这样做
  • 将Microsoft.AspNetCore的所有软件包参考更新至最新版本(2.2.0或更高版本)
另外,请确保在测试项目中包含对Microsoft.AspNetCore.App的包引用,方法是将其包含在项目文件中:

<PackageReference Include="Microsoft.AspNetCore.App" />



关于您关于
Microsoft.AspNetCore.Mvc.Testing
Microsoft.AspNetCore.TestHost
的问题:
TestHost
命名空间由一组类型组成(包括
TestServer
),用于在内存中托管应用程序以进行测试。
Microsoft.AspNetCore.Mvc.Testing
包提供了支持应用程序功能测试的基础架构(包括
TestServer
)通过使用
WebApplicationFactory
类。

这可能是由于2.1和2.2之间的版本不匹配造成的:您通过
netcoreapp2.1
以.NET Core 2.1为目标,但您包含了2.2.0包。将NuGet软件包降级至2.1.x版本或将应用程序升级至2.2.0:

  • 从下载.NET Core 2.2 SDK
  • 将应用程序的目标框架从
    netcoreapp.2.1
    更新为
    netcoreapp2.2
    netcoreapp2.1
    。确保对应用程序和测试应用程序都这样做
  • 将Microsoft.AspNetCore的所有软件包参考更新至最新版本(2.2.0或更高版本)
另外,请确保在测试项目中包含对Microsoft.AspNetCore.App的包引用,方法是将其包含在项目文件中:

<PackageReference Include="Microsoft.AspNetCore.App" />



关于您关于
Microsoft.AspNetCore.Mvc.Testing
Microsoft.AspNetCore.TestHost
的问题:
TestHost
命名空间由一组类型组成(包括
TestServer
),用于在内存中托管应用程序以进行测试。
Microsoft.AspNetCore.Mvc.Testing
软件包通过使用
WebApplicationFactory
类提供基础设施,以支持应用程序(包括
TestServer
)的功能测试。

您可以共享测试项目的csproj文件吗?特别是对
Microsoft.AspNetCore.App
@HenkMollema Done的引用,请参阅我对该问题的第二次编辑。我没有看到对Microsoft.AspNetCore.App的实际引用。尝试将
添加到测试项目中。是的,看起来是这样的。您的应用程序使用的是什么
TargetFramework
?如果是
netcoreapp2.1
,那么您也应该使用
2.1.x
软件包,而不是
2.2.x
软件包。这取决于具体情况。如果要在.NET Core 2.2上运行,可以将
netcoreapp2.1
更改为
netcoreapp2.2
。确保您也从安装.NET Core 2.2 SDK。同时更新所有
Microsoft.AspNetCore
packag