如何对CRUD(检索)进行单元测试?

时间:2019-04-22 12:28:08

标签: c# entity-framework unit-testing moq

.net核心和单元测试的新功能,所以请您帮我指出问题出在我的代码中。

[TestMethod]
public void RetrieveAsync_AddModel_ReturnsNotEmptyPersonList()
{
    // Arrange
    var data = new List<Person>();

    var mySet = new Mock<DbSet<Person>>();
    var defaultHttpContext = new DefaultHttpContext();
    var httpContextAccessorMock = new Mock<IHttpContextAccessor>();
    httpContextAccessorMock.Setup(m => m.HttpContext).Returns(defaultHttpContext);
    var myContextMock = new Mock<MyContext>(new DbContextOptions<MyContext>(), httpContextAccessorMock.Object);
    myContextMock.Setup(c => c.Set<Person>()).Returns(mySet.Object);
    var id = Guid.NewGuid();
    var service = new PersonService(myContextMock.Object);
    var model = new Person
    {
        Id = id
    };

    // Act
    var createdModel = service.CreateAsync(model).Result;
    data.Add(createdModel);
    var findModelById = data.Find(item => item.Id == createdModel.Id).Id;
    **var retrievedModel = service.RetrieveAsync(findModelById).Result; // null**

    // Assert
    **Assert.AreEqual(id, createdModel.Id); // correct, test passes
    Assert.AreEqual(id, retrievedModel.Id); // retrievedModel is null, test fails**
}

我要测试的泛型方法如下:

public async Task<T> CreateAsync(T model)
{
    _dbContext.Set<T>().Add(model);
    await _dbContext.SaveChangesAsync();
    return model;
}

public async Task<T> RetrieveAsync(Guid id)
{
    return await _dbContext.Set<T>().FindAsync(id);
}

问题是,为什么retrievedModelnull

0 个答案:

没有答案