加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 单元测试域模型对象

发布时间:2020-12-15 18:12:26 所属栏目:百科 来源:网络整理
导读:在我们的Core域模型设计中,我们有一个名为“Category”的类,其构造函数是内部设计的.由于构造函数是内部的,因此在编写单元测试用例时,我将无法创建“类别”对象. 所以我的问题是,将构造函数公开以使“类别”类可测试是最佳做法吗?或者我不应该测试“类别”,
在我们的Core域模型设计中,我们有一个名为“Category”的类,其构造函数是内部设计的.由于构造函数是内部的,因此在编写单元测试用例时,我将无法创建“类别”对象.

所以我的问题是,将构造函数公开以使“类别”类可测试是最佳做法吗?或者我不应该测试“类别”,而应该测试负责创建此对象的类/方法?

钽,

Rajeesh

解决方法

TDD意味着测试驱动设计,并且对此的证据是,如果您无法对其进行测试,那么构造函数就不能真正“内部设计”.

考虑为什么它是内部的.这将告诉您如何解决该问题.您不应该将构造函数设置为公开只是为了能够测试它,但您应该考虑一种可以轻松创建新实例的设计.

通常,构造函数是内部的,以保护不变量,但您也可以使用公共构造函数实现相同的目标,该构造函数将所需的输入作为构造函数参数.

public class MyClass
{
    private readonly string requiredString;

    public MyClass(string requiredString)
    {
        if (requiredString == null)
        {
            throw new ArgumentNullException("requiredString");
        }
        this.requiredString = requiredString;
    }
}

注意Guard子句和readonly关键字的组合如何保护类的不变量.这通常是内部构造函数的一个很好的替代方法.

拥有内部构造函数的另一个原因是当你有一个可以返回多态对象的工厂方法时,但是再次考虑如果构造函数不是指不妥协的话,那么暴露构造函数是否会成为问题.

TDD的美妙之处在于它迫使我们好好看看任何设计决策,并能够真正证明每一个设计决策的合理性.考虑使构造函数内部化然后修改API以使类型易于创建的理由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读