首页 > 解决方案 > 为什么这段代码不适合单元测试?

问题描述

显然这段代码不适合单元测试,我想知道为什么?代码对单元测试“好”是什么意思?

 public class B 
  {
        public int Y { get ; }
        public int X { get ; }
        public B() 
        {
          X = 3;
          Y = 7;
        }

        public B(int x) 
        {
          X = x;
          Y = 2 * x;
        }
  }

 public class A 
 {
        public B MyB { get ; set ; }
        public A() {MyB = new B ();}

        bool M1( int a, int b) 
        {
           if (a > MyB.X) return false;
           if (b < MyB.Y) return false;
           return true;
        }

        public B M2(int x) { return new B(x);}
}

标签: c#unit-testing

解决方案


我的第一印象是缺少对 A() 的依赖注入

 public A() {MyB = new B ();}

基本上你不能模拟/注入 B 到构造函数,这意味着你留下了你无法影响的真实 B 对象创建/行为。

不影响可测试性,但 M2 方法没有意义。什么时候用都可以换成simple 'new B(x)'(更别提打破A类的单一职责原则了)


推荐阅读