xUnit, Moq - тест репозитория ядра .Net - PullRequest
0 голосов
/ 19 марта 2019

Я учусь писать модульные тесты в xUnit и Moq, у меня проблема несколько. Я написал 2 теста в одном, добавляю категорию и скачиваю все, проверяя через Assert или что бы то ни было. Во втором случае я также добавляю категории и получаю сведения о добавленной категории, к сожалению, я не могу отобразить сведения о загруженной категории, это тест TestCategoryDetails. Что я делаю не так?

using Moq;
using relationship.Models;
using Xunit;
using Xunit.Abstractions;

namespace Testy
{
    public class UnitTest1
    {
        private readonly ITestOutputHelper _output;
        public UnitTest1(ITestOutputHelper output)
        {
            _output = output;
        }

        [Fact]
        public void TestCategoryList()
        {
            var categoryMock = new Mock<ICategoryRepository>();
            var contextMock = new Mock<AppDbContext>();
            categoryMock.Setup(x => x.AddCategory(new GameCategory { Id= 1, Name = "Tester" }));

            var result = categoryMock.Object;
            Assert.NotNull(result.GameCategory());
        }

        [Fact]
        public void TestCategoryDetails()
        {
            var categoryMock = new Mock<ICategoryRepository>();
            var contextMock = new Mock<AppDbContext>();
            categoryMock.Setup(x => x.AddCategory(new GameCategory { Id = 1, Name = "Tester" }));

            var result = categoryMock.Object;
            var categoryDetails = result.GetDetails(1);
            Assert.NotNull(categoryDetails);
        }
    }
}

В общем, я хотел протестировать свой репозиторий, проверив, как добавлять, редактировать, удалять, загружать все категории и детали выбранной, к сожалению, я ничего не делаю.

1 Ответ

1 голос
/ 20 марта 2019

Что вы делаете, вы пытаетесь проверить макет абстракции хранилища. Но вы хотите проверить свою реализацию.

Что хорошо подходит для тестирования в контексте БД, так это использование в провайдере памяти реального контекста. Для деталей смотрите: https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/

В конце это может выглядеть так (второй тест):

...

[Fact]
public void TestCategoryDetails()
{
    // arrange
    var categoryRepository = new CategoryRepository(GetContextWithInMemoryProvider());

    // act
    categoryRepository.AddCategory(new GameCategory { Id = 1, Name = "Tester" });
    var categoryDetails = categoryRepository.GetDetails(1);

    // assert
    Assert.NotNull(categoryDetails);
}

private AppDbContext GetContextWithInMemoryProvider()
{
    // create and configure context
    // see: https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/
}

...
...