【发布时间】:2016-01-02 10:54:07
【问题描述】:
类结构如下所示:
class A {
protected String a;
protected String b;
A(String b1) {
new A("A111", b1);
}
A(String a1, String b1) {
a = a1;
b = b1;
}
}
class B extends A {
B(String b) {
super("A", b);
}
}
我需要编写 JUnit 测试用例,并且需要模拟 A 类的构造函数,这样每当需要为 B 类创建对象时,A 类的模拟构造函数就应该被调用并从模拟构造函数返回对象。
我尝试了以下操作:
new MockUp<A>() {
@Mock
public void $init(String b1) {
new A("A11111111", b1);
}
};
但在模拟构造函数中创建的对象尚未返回。
【问题讨论】:
-
我不明白你的要求。你能多解释一下你想做什么以及你想测试什么吗?
-
好像想把超类的构造函数和子类分开,只测试子类的逻辑(通过mock超类)?但事情是这样的:构造函数并没有真正返回对象 - 当你调用
super()时,你没有将它分配给任何东西,因为它在this上运行......所以你不能“调用并从模拟返回对象构造函数”在这种情况下。 -
我想模拟单个参数化构造函数,从模拟构造函数中,我想使用两个参数化构造函数创建对象并返回相同的对象以供进一步使用。
-
@dcsohl 是的..你说得对......我们怎样才能做到这一点?
标签: java unit-testing junit constructor jmockit