|
|
1
1
在这一方法中有三件不相关的事情(参见 SRP )它们中的每一个都应该被分离到它们自己的类中,该类实现了一些接口,这样您就可以模拟它们以获得更好的可测试性。树的东西是:
当算法被分离成这三个部分时,可以单独地测试部件1和3(尽管在技术上,第1部分的测试不是单元测试),因为它触及文件系统,除非C语言有某种方式来模拟文件系统,如Java 7的NIO2文件系统API应该是可模仿的。您还可以通过模拟第2部分来对将它们放在一起的代码进行单元测试。 |
|
|
2
4
通过这样重构它:
|
|
|
3
1
我将把内环体提取成一种方法。我会努力让那个方法返回T实例,或者如果测试失败则返回空值。现在我可以编写单元测试了。
现在,我可以为这个新的函数类型提供一个期望返回非空实例的函数类型,以及期望返回空实例的函数类型。其余的代码似乎都在使用系统调用,我倾向于相信这些调用。但如果你不这样做-那就单独测试一下。测试那个
|
|
|
4
0
我将抽象出动态程序集的检测和加载,这样我就可以模拟该部分并将测试程序集加载为单元测试的一部分。 或者,由于您可以指定一个目录,所以只需在单元测试代码中构造计算机temp目录中的一个临时目录,将一个程序集从单元测试项目复制到该目录,并要求插件系统扫描该目录。 |
|
|
5
0
您没有说您使用的是哪个单元测试框架,所以我假设这里是Visual Studio的内置功能。 您需要将有问题的程序集添加到部署项列表中,以便将它们复制到单元测试工作目录中。 我看到的问题是在所有不同的实现上运行单元测试。在一个测试中测试所有的实现会使我们不清楚哪些实现会失败。您希望为每个实现运行一次测试。
但是,您可能会滥用数据驱动的测试机制来实现这一点。您可以在加载所有X实现(在类_initialize或其他任何方法中)之后,在一些临时数据库表中插入一个数字0…X-1。
为每个测试设置该表,测试将运行X次,并以数字作为输入数据。用它作为你的
是的,非常难看……您将失去执行实际数据驱动测试的能力,而不会增加更多的丑陋。 |
|
|
JBryanB · 如何从基本抽象类访问类属性 2 年前 |
|
|
Gabe Tucker · 无法在golang中分配接口对象指针 3 年前 |
|
|
jkone27 · F#-在编译时从字符串生成简单的空类型 8 年前 |
|
|
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 8 年前 |
|
|
Randall Flagg · 访问propertyinfo中的属性 8 年前 |
|
|
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 8 年前 |
|
|
tobeypeters · 反射铸造 8 年前 |
|
|
myst02 · 如何在另一个方法之后调用该方法? 8 年前 |