当前位置:  开发笔记 > 后端 > 正文

集成测试ASP.NET 5 Identity

如何解决《集成测试ASP.NET5Identity》经验,为你挑选了0个好方法。

我试图使用EF7为我的ASP.NET 5 MVC6 Api进行集成测试.我正在使用Identity已经实现的默认项目.

这是我试图在我的控制器中测试的动作(获取登录用户的所有孩子)

[Authorize]    
[HttpGet("api/children")]
public JsonResult GetAllChildren()
{
    var children = _repository.GetAllChildren(User.GetUserId());
    var childrenViewModel = Mapper.Map>(children);
    return Json(childrenViewModel);
}

在我的测试项目中,我创建了一个内存数据库,然后对其进行集成测试

这是我用于集成测试的Base

public class IntegrationTestBase 
{
    public TestServer TestServer;
    public IntegrationTestBase()
    {
        TestServer = new TestServer(TestServer.CreateBuilder().UseStartup());
    } 
}

这里是TestStartup(我覆盖了添加SQLServer的方法,添加了内存测试数据库)

public class TestStartup : Startup
{
    public TestStartup(IHostingEnvironment env) : base(env)
    {
    }

    public override void AddSqlServer(IServiceCollection services)
    {
        services.AddEntityFramework()
            .AddInMemoryDatabase()
            .AddDbContext(options => {
                options.UseInMemoryDatabase();
            });
    }

}

并且测试了行动

public class ChildTests : IntegrationTestBase
{
    [Fact]
    public async Task GetAllChildren_Test()
    {
        //TODO Set Current Principal??

        var result = await TestServer.CreateClient().GetAsync("/api/children");
        result.IsSuccessStatusCode.Should().BeTrue();

        var body = await result.Content.ReadAsStringAsync();
        body.Should().NotBeNull();
        //TODO more asserts
    }
}

任何人都可以指出我正确的方向如何设置CurrentPrincipal或其他方式让我的集成测试工作?

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有