asp.net核心-集成测试和查看组件

时间:2019-08-06 06:09:01

标签: c# asp.net-core integration-testing

自从我在应用中创建了视图组件以来,我面临一个奇怪的问题。 我使用HttpClient进行的所有集成测试均以响应代码“内部服务器错误”开始失败。

这里是测试配置:

public class BaseTest<TStartup>
        : WebApplicationFactory<TStartup> where TStartup : class
    {
        private readonly bool _hasUser;
        private readonly HttpClient _client;

        protected BaseTest(bool hasUser = false)
        {
            _hasUser = hasUser;
            _client = CreateClient(new WebApplicationFactoryClientOptions
            {
                AllowAutoRedirect = false,
            });
        }

        protected async Task<HttpResponseMessage> GetPageByPath(string path)
        {
            return await _client.GetAsync(path);
        }

        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            builder.ConfigureTestServices(services =>
            {
                if (_hasUser)
                {
                    services.AddScoped<IAuthenticationService, AuthenticationServiceStub>();
                    services.AddSingleton<IStartupFilter, FakeUserFilter>();
                    services.AddMvc(options =>
                    {
                        options.Filters.Add(new AllowAnonymousFilter());
                        options.Filters.Add(new AuthenticatedAttribute());
                    });
                }
            });

            builder.ConfigureServices(services =>
            {
                // Create a new service provider.
                ServiceProvider serviceProvider = new ServiceCollection()
                    .AddEntityFrameworkInMemoryDatabase()
                    .BuildServiceProvider();

                // Build the service provider.
                var sp = services.BuildServiceProvider();
                // Create a scope to obtain a reference to the database
                // context (ApplicationDbContext).
                using (var scope = sp.CreateScope())
                {
                    var scopedServices = scope.ServiceProvider;
                    var logger = scopedServices
                        .GetRequiredService<ILogger<BaseTest<TStartup>>>();
                }
            });
        }
    }
}

以及用法示例:

public class BasicTest : BaseTest<Startup>
    {
        public BasicTest() : base()
        {
        }

        [Theory]
        [InlineData("/")]
        [InlineData("/Index")]
        [InlineData("/Users/SignOut")]
        [Trait("Category", "Integration")]
        public async Task Get_EndpointsReturnSuccessAndCorrectContentType(string url)
        {
            // Act
            var response = await GetPageByPath(url);

            // Assert
            response.EnsureSuccessStatusCode(); // Status Code 200-299
            Assert.Equal("text/html; charset=utf-8",
                response.Content.Headers.ContentType.ToString());
        }
    }

如果您需要组件代码,请告诉我。

我已经回滚了代码以检查何时开始发生,并且它是在提交后在几页中调用了新的Component之后开始的。

0 个答案:

没有答案