Как выполнить юнит-тест CRUD (Retrieve)? - PullRequest
0 голосов
/ 22 апреля 2019

Совершенно новый как для ядра .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);
}

Вопрос в том, почему retrievedModel это null?

...