【发布时间】:2015-09-01 02:20:06
【问题描述】:
我正在学习 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 的构造函数是私有的,它应该是绿色的,如果是公共的,它应该是红色的。是否可以制作这样的测试用例?我该怎么做?
【问题讨论】:
-
如果构造函数是私有的,你的测试类不会编译。
-
您可以使用反射,但为什么?您不信任与您合作的人吗?另请注意,随着系统的发展,实施测试变得脆弱且难以维护。
-
如果你只是想保证私有构造函数永远不会被调用(无论出于何种原因),在构造函数的主体中抛出一个检查异常。但是,正如 agad 已经说过的那样,由于类外部的构造函数不可见,您的测试甚至无法编译。