модульное тестирование с помощью ArgumentValidator.VerifyNotNullOrEmpty - PullRequest
0 голосов
/ 20 февраля 2019

Я делаю юнит-тестирование.И у меня есть следующий метод:

  public PortfolioFileGetListDto(string documentsCaseNumber)
        {
            ArgumentValidator.VerifyNotNullOrEmpty(documentsCaseNumber, nameof(documentsCaseNumber));

            CaseNumber = documentsCaseNumber;
        }

, и я пытаюсь тестировать этот метод следующим образом:

 [TestMethod]
        public void PortfolioFileGetListDto_Constructor_ShouldValidateParameters()
        {
            // Portfolio           
            Action act = () => new PortfolioFileGetListDto(null);
            act.Should().Throw<ArgumentNullException>().WithMessage("Value cannot be null.\n\rParameter name: portfolio");
        }

Но если я отлаживаю модульный тест, я получаю следующее исключение:

System.ArgumentNullException: 'Value cannot be null.
Parameter name: documentsCaseNumber'

Так как пройти этот модульный тест?

Спасибо

Ответы [ 2 ]

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

Утверждения ожидают сообщения с «.. Имя параметра: портфолио», но тестируемый метод вызовет исключение с именем параметра «documentsCaseNumber».

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

[TestMethod]
public void Constructor_WithInvalidParameter_ThrowsException()
{     
    Action construct = () => new PortfolioFileGetListDto(null);
    construct.Should().Throw<ArgumentNullException>()
            .Which.Message.Should().ContainEquivalentOf("documentsCaseNumber");
}
0 голосов
/ 20 февраля 2019

Утверждение зависит от того, какую Unit-Test-Framework вы используете.

Для Microsoft TestPlatform:

var exception = Assert.ThrowsException<Exception>(x => {
    new PortfolioFileGetListDto(null);
});
Assert.AreEqual("Value cannot be null.\n\rParameter name: portfolio", exception.Message);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...