代码之家  ›  专栏  ›  技术社区  ›  Joshua Stelten

带EF核和identity核的Integrationtest.net核心

  •  0
  • Joshua Stelten  · 技术社区  · 6 年前

    服务器)进行身份验证。

    我为每个独立的上下文创建了内存中的数据库(带有产品和标识的默认数据库)。当没有[授权]属性并且没有用户绑定到该属性时,我成功地测试了获取产品的代码,并且我的测试用例工作正常。现在我想让它更复杂一点,涉及到两个产品和用户的请求。

    假设这是我的简化代码:

    控制器:

    [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);
        }
    

    我发现了如何在数据库中填充一些关于产品的信息。我还没发现我该怎么做:

    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);
            });
    
    0 回复  |  直到 6 年前