我正在学习JUnit和测试驱动开发实践。我有空货币接口:如果构造函数存在,如何使JUnit测试失败?
它实现货币接口CommonMoney类:
public class CommonMoney implements Money {
private CommonMoney() {
}
public static Money create(String decimalPart, Currency currency) {
return new Money() {
};
}
}
和测试CommonMoney
public class MoneyTest {
// some test cases before
@Test
public void shouldNotCreateCommonMoneyObjectWithEmptyConstructor() {
@SuppressWarnings("unused")
Money money = new CommonMoney();
fail();
}
}
现在测试用例shouldNotCreateCommonMoneyObjectWithEmptyConstructor是红色MoneyTest类,但它如果CommonMoney的构造函数是私有的,应该是绿色的,如果是公共的,则应该是绿色的。是否有可能做出这样的测试用例?我该怎么做?
如果构造函数是私有的,那么您的测试类不会编译。 – agad
你可以使用反射,但**为什么?**你不相信你正在使用的人吗?另外请注意,随着系统的增长,实施测试很脆弱并且难以维护。 – kdgregory
如果你只是想保证private构造函数永远不会被调用(因为什么原因)在构造函数的主体内抛出一个检查异常。但是,正如agad已经指出的那样,由于类之外的构造函数不可见,你的测试甚至不会编译。 –