Kamrit
@Kamrit
QA Engineer

Как правильно писать Unit Test к ASP.NET MVC?

Есть тестируемый метод:
public class CategoryModelService : ICategoryModelService
    {
        private readonly ICategoryModelRepository _categoryModelRepository;
        private readonly ICoastModelRepository _coastModelRepository;

        public CategoryModelService(ICategoryModelRepository _categoryModelRepository, ICoastModelRepository 
        _coastModelRepository)
        {
            this._categoryModelRepository = _categoryModelRepository;
            this._coastModelRepository = _coastModelRepository;
        }
        public async Task<CategoryModel> AddCategory(CategoryModel category)
        {
            var result = await _categoryModelRepository.AddCategory(category);  
            if (result != null)
            {
                return category;
            }
            else
            {
                return null;
            }
        }
}

И мой тестовый метод который должен протестировать метод сверху:
[TestClass]
    public class CategoryModelServiceTest
    {
        [TestMethod]
        public void MyTest()
        {
            Mock<ICategoryModelRepository> _categoryModelRepository = new Mock<ICategoryModelRepository>();
            Mock<ICoastModelRepository> _coastModelRepository = new Mock<ICoastModelRepository>();

            CategoryModelService categoryModelService = new CategoryModelService(_categoryModelRepository.Object, _coastModelRepository.Object);

            CategoryModel model = new CategoryModel()
            {
                AutorCategoryId = ObjectId.GenerateNewId().ToString(),
                Id = ObjectId.GenerateNewId().ToString(),
                Income = false,
                Name = "Name",
                NetIncome = true
            };

            CategoryModel result = new CategoryModel();
            Task.Run(async () => { result = await categoryModelService.AddCategory(model); }).Wait();

            Assert.IsNotNull(result);
        }
    }

Но, результат всегда возвращается null.
Подскажите, пожалуйста, что нужно изменить, что бы добиться нужного результата
  • Вопрос задан
  • 383 просмотра
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Нужно настраивать моки. Они по умолчанию возвращают default-значение требуемого типа. Таким образом внутри AddCategory мок репозитория всегда дает result == null и, соответственно, null возвращается, тест падает.

var model = new CategoryModel { ... };

var categoryModelRepository = new Mock<ICategoryModelRepository>();

categoryModelRepository.Setup(x => x.AddCategory(model))
                                            .Returns(model);
// Или
categoryModelRepository.Setup(x => x.AddCategory( It.IsAny<CategoryModel>() ))
                                            .Returns(model);

// Act...

Assert.IsNotNull(result);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы