Java 如何验证特定父构造函数的调用?
我有一个儿童班的代码-Java 如何验证特定父构造函数的调用?,java,mocking,powermock,Java,Mocking,Powermock,我有一个儿童班的代码- public class A extends B { public A(User user, UserFilter filter) { super(user, filter); } /* the second possible option public A(User user, UserFilter filter) { super(user, filter, null); } */ }
public class A extends B {
public A(User user, UserFilter filter) {
super(user, filter);
}
/* the second possible option
public A(User user, UserFilter filter) {
super(user, filter, null);
}
*/
}
和父类-
public class B {
private User user;
private UserFilter filter;
private QRCode code;
public B(User user, UserFilter filter) {
this.user = user;
this.filter = filter;
}
public B(User user, UserFilter filter, QRCode code) {
this.user = user;
this.filter = filter;
this.code = code;
}
}
我想验证是否只调用了特定的父构造函数。不是super(用户,筛选器,null)
而是super(用户,筛选器)
。我可以添加字段,这一点很重要,所以为代码检查null是不合适的
我想用PowerMockito
将public B(User-User,UserFilter-filter,QRCode-code)
私有化,并添加调用它的静态方法
通过这样做,您将能够用任何构造函数实例化您的B类。但是B的后代将被迫只使用可见构造函数,因此您正在尝试测试以确保您的
A
ctor是“正确的”,并且没有人更改ctor代码?我知道Mocktio。请验证您可以这样做,但必须模拟对象。设计和测试,这感觉太过指定了。你可以尝试控制你的代码和测试太多。为什么需要一个特定的构造函数?对象的行为还不够吗?@markspace,因为我之后的人可以更改我的代码。我想确保只调用特定的ctor
。@barbara这正是过度指定的测试所做的。这不是解决方案。我只需要测试代码。我不能做任何重构的事情。