通过TDD创建映射功能:太多的时间花在编写测试?
-
21-09-2019 - |
题
我是一个大TDD爱好者,并一直努力编写产品代码,以确保我在写代码的正确行为之前编写测试。然而,有时候,如果是几个问题,谨慎地写了大量的身体测试某些种类的方法。这似乎也最常写一个映射器类时。
public class FooBarMapper
{
public Foo MapToFoo(Bar bar)
{
return new Foo
{
Id = bar.Id,
Name = bar.Name,
FooYuk = bar.Beverage,
/* ... */
};
}
}
说,例如,有大约十几属性映射到上方。在TDD的环境中,写任何映射之前,我可能会写一个测试。喜欢的东西MapToFooMapsBeverageToFooYuk()
。测试失败,导致我写的代码,使之通过。我重复这对于每个属性映射。现在的问题是:这会毁了测试优先开发太远?我个人不这么认为,因为我宁愿有一个全套的测试告诉我的代码做什么,但我想听听社会的想法。
解决方案
即使鲍勃叔叔马丁,TDD和所有的东西TDD的坚定捍卫者,说,你不必编写单元测试每个微不足道的财产(一个简单的财产被定义为只是获取和设置一个成员变量属性)。
如果你曾经写具有副作用(我怀疑你会)的属性,然后可以添加一个单元测试它。作为DuffyMo指出,如果你的财产是通过功能测试覆盖,应该是没有必要的单元测试,因为不存在的规范的功能你用单元测试不是简单的get定义,其他/设置。
其他提示
也许这就是 FitNesse的诞生了。
在这种情况下,我会写一个单一的测试,在一次测试所有的琐碎属性。这不是很做事的标准方法,但最终,个人微不足道的性能测试可能会被重构到一个单一的测试的所有属性。由于性质是微不足道的,我建议出发与你有结束测试。
映射第一三个属性后,便见重复和通过循环特性和使用反射指定他们替换它。即只需要几次测试:0属性1个属性,5种性质,目标对象不具有预期的性能,源对象不具有预期的性质。现在,我可以在我的所有应用程序在其他地方重复使用该通用映射引擎,我不必每次我用它的时间来检查一下。
不隶属于 StackOverflow