【发布时间】:2017-06-26 04:41:51
【问题描述】:
尽管我已经了解了可测试设计的模拟、存根和类抽象的原理,但我仍然不清楚。
使用 .NET,有很多内置类,例如 StackTrace,位于 Diagnostics 命名空间下。
其中一些类包含其他类的集合,这些类也包含其他类,等等等等…… - 包含原则。
例如:StackTrace 类包含一个由StackFrame 对象组成的数组,它本身有一个返回MethodBase 对象的方法。
假设这些类都不是抽象的,这意味着它们不能被直接模拟 - 如何设计代码来模拟这些类,不创建大量包装类并浪费大量时间就在上面?
我希望我对那个足够清楚。
【问题讨论】:
-
为什么要模拟
StackTrace?您通常模拟 services - 而不是StackTrace和MethodBase等数据对象。 (同样,你不必费心嘲笑集合、字符串等) -
@JonSkeet
StackTrace类具有在内部读取文件的能力(这是一个 I/O,因此它是一种服务),因此必须对其进行模拟以避免文件系统依赖.如果我错了,请纠正我。 -
仅当您使用它们的那个方面时。
-
你所追求的几乎没有实用价值。 1)您不应该测试其他人的代码 2)您的二进制文件位于运行它们的磁盘上的某个位置,您的代码将在那里具有读/写访问权限,不是吗?那么允许
StackTrace完成它的工作有什么问题呢?StackTrace公开了虚拟方法,因此要实现您的目标,您必须编写自己的继承自StackTrace的类并覆盖这些方法。 -
这是一个实际问题还是假设问题?如果可行:您的测试用例和代码是什么?
标签: c# .net unit-testing nunit moq