使用构造函数作为唯一公共方法对类进行单元测试

时间:2014-10-27 17:03:36

标签: java unit-testing junit

我有一个课程如下:

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.
    }
}

只能通过构造函数访问setter的原因是我不想在初始化后更改对象,因为memberOnememberTwo之间存在依赖关系(示例可以是MemberOne表示表头,MemberTwo表示表中的数据,并保持编码简单,不受约束检查,如果列和数据集中的列数相等。

作为一种做法,我不会为私有方法编写测试用例。为本课程编写测试用例的好策略是什么。

3 个答案:

答案 0 :(得分:2)

您可以将MemberOneMemberTwo的建筑物提取到单独的班级。

private setMemberOne(ParamOne paramOne) {
    memberOne = new MemberOneBuilder().buildFromParam(paramOne);
}

public class MemberOneBuilder {
    public MemberOne buildFromParam(ParamOne paramOne) {
        ....
    }
}

现在您可以轻松地单独测试构建过程。

答案 1 :(得分:0)

我可能会误解这一点,但是你不能使memberOne和memberTwo成为最终版本,然后将setMemberOne和setMemberTwo公开?然后你可以实例化memberOne和memberTwo,但它们将无法被更改。

答案 2 :(得分:0)

这似乎更像是一个假设的场景,而只是为了做到这一点,如果我们要编写这样的代码以及它的测试用例,在Unit-Test类中使用Reflection是唯一的出路在这里。