модульное тестирование командного обработчика зависит от интерфейса - PullRequest
0 голосов
/ 24 января 2020

Мне не очень удобно писать модульный тест. Извините, что задали базовые c вопросы.

Вот командный обработчик

ICalculateAge CalculateAge { get; set; }

public UpdateAgeCommandHandler(ICalculateAge calculateAge)
{
    this.CalculateAge = calculateAge;
}

Я хочу выполнить это модульное тестирование, поэтому я попытался выполнить ниже в файле cs в своем тестовом проекте:

UpdateAgeCommandHandler cmd1 =  new UpdateAgeCommandHandler());

Но это не работает, потому что я не передаю интерфейс. Как мне пройти этот интерфейс?

1 Ответ

1 голос
/ 24 января 2020

Нельзя передать интерфейс, так как интерфейс предназначен только для стандартизации.

Вы должны пройти реализацию интерфейса. Реализация означает класс, который реализует ICalculateAge.

Документация по интерфейсу

Этот блог объясняет точно такой же сценарий на примере. Это может быть полезно для вас.

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

var mockFinancialService = new Mock<IFinancialService>();
mockFinancialService.Setup(x => 
     x.GetFinancialScore(balance)).Returns(expected);

Затем они передают этот смоделированный объект классу вместо интерфейса.

var account = new BankAccount(mockFinancialService.Object);
account.PutMoney(balance);

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

// Act
string actual = account.GetFinancialScore();

// Assert
Assert.AreEqual(actual, expected);

Аналогично этому вам потребуется настроить макет с вашего интерфейса, если вы не хотите тестировать фактическую реализацию интерфейса.

...