不
服务器)进行身份验证。
我为每个独立的上下文创建了内存中的数据库(带有产品和标识的默认数据库)。当没有[授权]属性并且没有用户绑定到该属性时,我成功地测试了获取产品的代码,并且我的测试用例工作正常。现在我想让它更复杂一点,涉及到两个产品和用户的请求。
假设这是我的简化代码:
控制器:
[Route("test")]
public class TestController : Controller
{
private readonly UserManager<User> userManager;
public TestController(UserManager<User> _usermanager)
{
usermanager = _usermanager;
}
[HttpGet("[action]")]
[Authorized(Policy = "Seller")]
public List<Product> GetAllProductsFromUser()
{
User user = await userManager.GetUserAsync(HttpContext.User);
List<Product> products = db.Products.Where(x => x.userId == user.userId).ToList();
return products;
}
}
[Fact]
public async Task Testcase()
{
var response = await _client.GetAsync("/test/GetAllProductsFromUser");
response.EnsureSuccessStatusCode();
var stringResponse = await response.Content.ReadAsStringAsync();
var products= JsonConvert.DeserializeObject<List<Product>>(stringResponse);
Assert.Equal(3, products.Count);
}
我发现了如何在数据库中填充一些关于产品的信息。我还没发现我该怎么做:
2) 以该用户身份登录,检索auth cookie,将其存储在某个地方并用于我的测试用例。
3) 用那块饼干提出请求
4) 验证用户是否有“卖方”索赔
当然,这些都不应该发生在实际的数据库中。我创建了一个内存数据库:
services.AddDbContext<MyIdentityContext>(options =>
{
options.UseInMemoryDatabase("InMemoryIdentityDbForTesting");
options.UseInternalServiceProvider(serviceProvider);
});
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseInMemoryDatabase("InMemoryDbForTesting");
options.UseInternalServiceProvider(serviceProvider);
});