Настройка на Mock не возвращает ожидаемое значение - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть метод, показанный ниже, для которого я пытаюсь написать модульный тест.

    public IActionResult Get(string market, string program, string destination, string language, string type, string subtype) {

        var salesItemTypeNumber = (int)Enum.Parse(typeof(SalesItemType), type);

        var salesItemRequest = new SalesItemRequest {
            Market = market,
            Program = program,
            Destination = destination,
            Type = salesItemTypeNumber,
            Language = language
        };
        var loggingFields = logger.GetLoggingFields(salesItemRequest);
        var salesItems = new List<SalesItem>();

        try {
                 salesItems = repository.GetSalesItems(salesItemRequest).ToList();

            if (salesItems == null || !salesItems.Any()) {
                return StatusCode(StatusCodes.Status204NoContent);
            }

            var listOfSalesItems = salesItems.Select(salesItem => new {
                Sku = salesItem.Sku,
                Code = salesItem.Code,
                Description = salesItem.Description,
                EnglishDescription = salesItem.EnglishDescription
            }).ToList();

            return StatusCode(StatusCodes.Status200OK, listOfSalesItems);
        }
    }

Мне нужно смоделировать метод GetSalesItems ().Когда я настраиваю метод, он не возвращает ожидаемого значения, когда запускается определенный фрагмент кода.Пожалуйста, найдите ниже метод модульного тестирования.Укажи мне, что не так.

    [TestMethod]
    public void Check_Status_When_Get_Method_Is_Invoked() {
        var salesItemsList = new List<SalesItem> {
            new SalesItem {
                Sku = "BB-GB-LON",
                Code = "BB",
                Description = "Breakfast",
                EnglishDescription = "Breakfast"
            },
            new SalesItem {
                Sku = "COL1-GB-LON",
                Code = "COL1",
                Description = "Course Literature 1-6 weeks",
                EnglishDescription = "Course Literature 1-6 weeks"
            },
        };
        priceRepositoryMock.Setup(m => m.GetSalesItems(new SalesItemRequest() {
            Market = "DEB",
            Program = "ILS",
            Destination = "GB-LON",
            Language = "en"
        })).Returns(salesItemsList);

        var response = salesItemController.Get("DEB", "ILS", "GB-LON", "en", "80", string.Empty);

        Assert.AreEqual(200, ((ObjectResult) response).StatusCode);
    }

1 Ответ

0 голосов
/ 12 февраля 2019

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

It.Is<T>()

priceRepositoryMock
    .Setup(_ => _.GetSalesItems(It.Is<SalesItemRequest>(
        arg => arg.Market == "DEB" && 
                arg.Program == "ILS" && 
                arg.Destination == "GB-LON" 
                && arg.Language == "en"
    ))
    .Returns(salesItemsList);

или

It.IsAny<T>()

priceRepositoryMock
    .Setup(_ => _.GetSalesItems(It.IsAny<SalesItemRequest>()))
    .Returns(salesItemsList);

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

Ссылка Moq Quickstart , чтобы лучше понять, как использовать сопоставления аргументов в инфраструктуре макета.

...