模型是否可以/应该仅包含用于单元测试的属性/变量?

时间:2019-04-10 07:59:27

标签: c# unit-testing model-view-controller model

存储在模型中的数据的常用/最佳做法是什么。我正在编写用于计算的单元测试,并且我有一个属性,该属性返回实际用于在数据库中存储数据的其他属性的值。在模型中定义如下

    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 个答案:

答案 0 :(得分:1)

模型可以包含仅用于单元测试的属性吗?

嗯,没有限制。您可以添加所需的任何属性。

您应该这样做吗?

否。添加此类属性不是一个好习惯。同样,这全都与您要如何设计类有关。根据抽象和封装的规则,您应该只向类使用者公开必需的属性。

理想情况下,在单元测试中,也应该检查被测试的类/方法的最终结果,而不是测试内部/私有变量。

希望这会有所帮助。

答案 1 :(得分:1)

如果leftOverDebtInSystemCurrencyForDate与您的应用程序完全无关,则应将其从代码中删除。

如果您的应用程序访问了leftOverDebtInSystemCurrencyForDate(而不是单元测试),则应将其保留在模型中或提取到服务中。

单元测试不应包含leftOverDebtInSystemCurrencyForDate的任何逻辑。