我正在学习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的构造函数是私有的,则它应为绿色,如果是公共构造函数则为红色。有可能像这样制作测试用例吗?我怎么能这样做?
答案 0 :(得分:2)
是否可以像这样制作测试用例?
是的,可以使用java反射来实现此测试,例如see this question。否则,您无法测试私有构造函数是否存在于该类的外部 - 代码刚刚被编译。
然而,测试它并没有多大意义。访问修饰符实际上是为了方便开发人员和限制访问范围。可以说,范围限制也是为了方便起见。
您的测试应该涵盖公共API,而不是私有实现。
答案 1 :(得分:1)
这不是你需要测试的东西。
正如阿加德指出的那样,代码无论如何都不会编译它,因为通过使构造函数变为私有,你无法使用空构造函数创建对象。
编译器正在为您进行有效的检查,因此您不需要编写特定的测试来检查它。