单元测试类的构造函数作为唯一的公共方法
问题描述:
我有一类是如下:单元测试类的构造函数作为唯一的公共方法
class ToTest {
private MemberOne memberOne;
private MemberTwo memberTwo;
public ToTest(ParamOne paramOne, ParamTwo paramTwo) {
setMemberOne(paramOne);
setMemberTwo(paramTwo);
}
private setMemberOne(ParamOne paramOne) {
//Build the object.
}
private setMemberTwo(ParamTwo paramTwo) {
//build another object.
}
}
之所以制定者只能通过构造函数访问的是,我不想换一次初始化的对象因为memberOne
和memberTwo
之间存在依赖关系(示例可以是MemberOne
代表表头并且MemberTwo
代表表格中的数据并且保持编码简单并且没有约束检查是否列头和数据集中的列数相等)。
作为一种做法,我不写私人方法的测试用例。编写这个类的测试用例是一个很好的策略。
答
您可以将建筑物MemberOne
和MemberTwo
提取到单独的课程。
private setMemberOne(ParamOne paramOne) {
memberOne = new MemberOneBuilder().buildFromParam(paramOne);
}
与
public class MemberOneBuilder {
public MemberOne buildFromParam(ParamOne paramOne) {
....
}
}
现在你可以很容易地分别测试了建设进程。
答
我可能会误解这个,但是不能让memberOne和memberTwo成为final,然后让setMemberOne和setMemberTwo成为公共的吗?然后你可以实例化memberOne和memberTwo,但是它们不能被改变。
答
这看起来更像是一个假设的场景,而为了这样做,如果我们需要编写这样一个代码,并且为它编写测试用例,在Unit-Test类中使用Reflection就是只有这里出路。
对象甚至做了什么呢? – FelixMarcus 2014-10-27 17:08:03
问题是? – SaintLike 2014-10-27 17:10:16
有一些获取这些对象的方法,然后将它传递给JSP,通过编写用于处理'MemberOne'和'MemberTwo'的标签来提取信息。 – 2014-10-27 17:10:30