c# - 为什么这段代码不适合单元测试?
问题描述
显然这段代码不适合单元测试,我想知道为什么?代码对单元测试“好”是什么意思?
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);}
}
解决方案
我的第一印象是缺少对 A() 的依赖注入
public A() {MyB = new B ();}
基本上你不能模拟/注入 B 到构造函数,这意味着你留下了你无法影响的真实 B 对象创建/行为。
不影响可测试性,但 M2 方法没有意义。什么时候用都可以换成simple 'new B(x)'
(更别提打破A类的单一职责原则了)
推荐阅读
- python - 即使 foreign_keys 为 ON,FOREIGN KEY 约束也会失败
- javascript - 是否可以使用带有 Javascript 的 HTML 的 CANVAS 上下文(ctx)来制作字体选择器?
- android - Admob 广告停止工作 - iOS14 是否也影响 android 版本控制?
- kotlin - 在接口方法中获取当前事务句柄
- c - * 之间有什么区别
和 * 在 C 中? - mysql - mysql 日志文件的文件位置
- arrays - 将 2 个数组合并为 1 个数组并过滤这个合并的数组,
- python-3.x - 如何根据组将值归入异常单元格?
- html - 在 CSS 对齐方面需要帮助
- python-3.x - Python:以块的形式读取大型 CSV