我试图使用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或其他方式让我的集成测试工作?