具有EF核心和身份核心的Integrationtest .net核心

时间:2019-01-16 10:28:01

标签: .net asp.net-core asp.net-identity integration-testing

我正在尝试对.net core 2.2项目实施自动化测试。但是我不知道如何启用身份验证。我在某处读到可以进行测试的测试,可以将其禁用,但是我也想测试访问权限。我使用身份(服务器)进行身份验证。

我在内存数据库中为每个单独的上下文创建了数据库(带有产品和标识的默认数据库)。当没有[Authorized]属性并且没有用户绑定到我的测试用例时,我设法测试了获取产品的代码。现在,我想通过涉及这两种产品以及用户的要求使其变得更加复杂。

让我们说这是我的简化代码:

控制器:

[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()
    {
        // Arrange
        //Setup a user and get their auth cookie??


        //Act
        //add the auth cookie to the request
        var response = await _client.GetAsync("/test/GetAllProductsFromUser");
        response.EnsureSuccessStatusCode();

        // Assert
        var stringResponse = await response.Content.ReadAsStringAsync();
        var products= JsonConvert.DeserializeObject<List<Product>>(stringResponse);
        Assert.Equal(3, products.Count);
    }

我发现了如何使用一些有关产品的信息来填充数据库。我还没找到方法:

1)从usermanager创建用户;

2)以该用户身份登录,检索auth cookie,将其存储在某个地方,并将其用于我的测试用例。

3)使用该Cookie发出请求

4)验证用户是否具有“卖方”声明

当然,这一切都不应该在实际数据库中发生。我创建了一个内存数据库:

services.AddDbContext<MyIdentityContext>(options =>
        {
            options.UseInMemoryDatabase("InMemoryIdentityDbForTesting");
            options.UseInternalServiceProvider(serviceProvider);
        });

services.AddDbContext<ApplicationDbContext>(options =>
        {
            options.UseInMemoryDatabase("InMemoryDbForTesting");
            options.UseInternalServiceProvider(serviceProvider);
        });

0 个答案:

没有答案