如果constuctor存在,如何使JUnit测试失败?

时间:2015-06-16 10:11:40

标签: java junit tdd

我正在学习JUnit和测试驱动开发实践。我有空的Money接口:

public interface Money {

}

实现Money接口的CommonMoney类:

public class CommonMoney implements Money {

    private CommonMoney() {

    }

    public static Money create(String decimalPart, Currency currency) {
        return new Money() {
        };
    }
}

测试CommonMoney的MoneyTest类

public class MoneyTest {

    // some test cases before

    @Test
    public void shouldNotCreateCommonMoneyObjectWithEmptyConstructor() {
        @SuppressWarnings("unused")
        Money money = new CommonMoney();
        fail();
    }
}

现在测试用例shouldNotCreateCommonMoneyObjectWithEmptyConstructor为红色,但如果CommonMoney的构造函数是私有的,则它应为绿色,如果是公共构造函数则为红色。有可能像这样制作测试用例吗?我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

  

是否可以像这样制作测试用例?

是的,可以使用java反射来实现此测试,例如see this question。否则,您无法测试私有构造函数是否存在于该类的外部 - 代码刚刚被编译。

然而,测试它并没有多大意义。访问修饰符实际上是为了方便开发人员和限制访问范围。可以说,范围限制也是为了方便起见。

您的测试应该涵盖公共API,而不是私有实现。

答案 1 :(得分:1)

这不是你需要测试的东西。

正如阿加德指出的那样,代码无论如何都不会编译它,因为通过使构造函数变为私有,你无法使用空构造函数创建对象。

编译器正在为您进行有效的检查,因此您不需要编写特定的测试来检查它。