我正在开展一个由数千个集成测试组成的大型测试项目。 有很多代码重复,有点乱。大多数测试由几个步骤组成,并且很多"虚拟"对象已创建。假人我的意思是这样的:
new Address {
Name = "fake address",
Email = "some@email.com",
... and so on
}
通常情况下,数据通常并不重要。这种代码在测试,测试基类和帮助程序中展开并重复。
我想要的是拥有一个单独的测试数据构建器",只有一个责任,生成测试所消耗的测试数据。
一种方法是让一个类包含一堆静态方法,如下所示:
Something CreateSomething(){
return new Something {
// set default dummy values
}
和过载:
Something CreateSomething(params){
return new Something {
// create the Something from the params
}
另一种方法是让xml文件包含数据,但我担心它会离测试太远。
目标是将这种代码移出测试,因为现在测试很大而且不可读。在典型情况下,50行测试代码,20-30是这种代码。
有没有完成此项目的模式?或者任何大型开源代码库的例子,我可以看一下类似的内容?
答案 0 :(得分:1)
我会回避指定测试依赖项的xml文件。
我的思维过程源于缺乏重构工具,这些xml文件无法在Visual Studio生态系统中利用。
相反,我会创建一个TestAPI。 此API将负责为测试客户端提供依赖关系数据。
请注意,正在请求的依赖关系数据已经使用常规数据初始化,并且已准备好用于请求依赖关系的客户端。
任何作为特定测试所需测试输入的值都将在测试本身内分配。这是因为我希望测试能够自我记录其意图或目标,并抽象出未经测试的依赖关系。
XUnit Test Patterns为编写测试提供了很多见解。
答案 1 :(得分:1)
对于代码,请使用简单的方法链接构建器模式:
public class TestOrderBuilder
{
private order = new Order();
// These methods represent sentances / grammar that describe the sort
// of test data you are building
public AnObjectBuilder AddHighQuantityOrderLine()
{
//... code to add a high quantity order line
return this; // for method chaining
}
// These methods represent sentances / grammar that describe the sort
// of test data you are building
public AnObjectBuilder MakeDescriptionInvalid()
{
//... code to set descriptions etc...
return this; // for method chaining
}
public Order Order
{
get { return this.order; }
}
}
// then using it:
var order = new TestOrderBuilder()
.AddHighQuantityOrderLine()
.MakeDescriptionInvalid()
.Order