首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TestServer返回404未找到

TestServer返回404未找到
EN

Stack Overflow用户
提问于 2019-08-15 12:12:12
回答 1查看 6.7K关注 0票数 24

我在我的web api项目中使用aspnetcore 3.0预览版7。目前我正在实现集成测试。(为了首先简化测试,我注释掉了控制器上的Authorize属性。)

服务器响应"404未找到“。我对在启动过程中不再使用"usemvc“感到困惑--我现在应该在设置测试服务器时做一些不同的事情吗?或者有人知道404的原因是什么?(用于3.0集成测试的MS文档尚未更新)。我也尝试过预览版8,但同样的问题。

测试类:

代码语言:javascript
复制
   [OneTimeTearDown]
    public virtual void Cleanup()
    {
        _unAuthenticatedServer.Dispose();
    }

    [OneTimeSetUp]
    public virtual void Initialize()
    {
        _unAuthenticatedServer = CreateServer(null);
    }

    protected TestServer CreateServer(
        string currentDirectory = null)
    {
        IWebHostBuilder webHostBuilder = WebHost.CreateDefaultBuilder();

        webHostBuilder.UseContentRoot(currentDirectory == null
            ? Directory.GetCurrentDirectory()
            : Directory.GetCurrentDirectory() + $"\\{currentDirectory}");


        webHostBuilder.UseStartup<TestStartup>();
        webHostBuilder.UseEnvironment("Test");

        webHostBuilder.ConfigureAppConfiguration((_, config) => config.AddJsonFile("appsettings.Test.json"));

        return new TestServer(webHostBuilder);
    }

    [Test, Order(1)]
    public async Task Should_Get_Games_Return_StatusCode_Ok()
    {
        //Arrange
        IList<GameDto> expectedDtos = GameDtoTestData.Games;

        //Act
        HttpResponseMessage responseMessage = await _unAuthenticatedServer
            .CreateClient()
            .GetAsync("api/games");

        //Assert
        responseMessage.StatusCode.Should().Be(HttpStatusCode.OK); // but is: 404 NotFound

        var responseString = await responseMessage.Content.ReadAsStringAsync();
        IEnumerable<GameDto> result = JsonConvert.DeserializeObject<IEnumerable<GameDto>>(responseString);

        result.Should().BeEquivalentTo(expectedDtos);
    }

控制器:

代码语言:javascript
复制
[Route("api/[controller]")]
[ApiController]
public class GamesController : ControllerBase
{
    private readonly IGameService _gameService;

    public GamesController(IGameService gameService)
    {
        _gameService = gameService;
    }

    [HttpGet]
    public async Task<ActionResult<IEnumerable<GameDto>>> Get()
    {
        return Ok(await _gameService.GetAsync());
    }
}

已安装Nuget包测试项目:

代码语言:javascript
复制
 <ItemGroup>
    <PackageReference Include="FluentAssertions" Version="5.8.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="3.0.0-preview7.19365.7" />
    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="3.0.0-preview7.19365.7" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.6" />
    <PackageReference Include="nunit" Version="3.12.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.14.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
  </ItemGroup>

已安装Nuget packages api项目:

代码语言:javascript
复制
  <ItemGroup>
    <PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="3.0.0-preview6.19307.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.6">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-24 19:55:48

对我来说起作用的是将包含Startup类的程序集注册为Mvc应用程序部件。

在启动类中,将以下代码添加到IServiceProvider ConfigureServices(IServiceCollection services)

代码语言:javascript
复制
services
  .AddMvc(...)
  .AddApplicationPart(typeof(Startup).Assembly)

您需要将包含Startup类的程序集注册为Startup类本身中的应用程序部分,这看起来可能有点奇怪;但这种方法确实适用于我。

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57504788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档