Может / должна ли модель содержать свойства / переменные только для модульного тестирования? - PullRequest
0 голосов
/ 10 апреля 2019

Что является общей / лучшей практикой для данных, хранящихся в модели.Я пишу модульные тесты для расчетов, и у меня есть свойство, которое возвращает значение других свойств, которые фактически используются для хранения данных в базе данных.В модели это определяется следующим образом:

    bool IsDebtAndPayCurrencyTheSame;

    public decimal leftOverDebtInSystemCurrencyForDate
    {
        get { return IsDebtAndPayCurrencyTheSame ? debt.allDebt.systemCurrency : Math.Round(debt.leftOverDebt.documentCurrency * Convert.ToDecimal(DebtCurrencyKoefPayoDate), 2); }
    }

, а модульный тест выглядит примерно так:

        Assert.AreEqual(100, income.detailRow[0].account.leftOverDebtInSystemValueForDate);

Итак, я должен оставить leftOverDebtInSystemCurrencyForDate в модели или скопировать его логику в модульный тест?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

Если к приложению обращаются к leftOverDebtInSystemCurrencyForDate (кроме юнит-теста), оно должно оставаться в вашем приложении.модель или быть извлечены в сервис.

Юнит-тест не должен содержать никакой логики для leftOverDebtInSystemCurrencyForDate.

1 голос
/ 10 апреля 2019

Может ли модель содержать свойства только для модульного тестирования?

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

Стоит ли это делать?

NO. Не стоит добавлять такие свойства. Опять же, это все о том, как вы хотите создать свои классы. Согласно правилам абстракции и инкапсуляции, вы должны предоставлять потребителям класса только необходимые свойства.

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

Надеюсь, это поможет.

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