Junit jmockit模拟构造函数未返回预期值
我试图对一个类进行单元测试,其中一个方法返回一个collaborator类的实例:根据其参数的值,它要么返回一个新创建的实例,要么返回一个保存的、以前创建的实例 我在期望中模拟构造函数调用,并将结果设置为一个值,该值是协作者的模拟实例。但是,当我使用参数值测试该方法时,会导致它创建一个新实例,模拟构造函数,因此该方法,不会返回预期值 我已将此简化为以下内容:Junit jmockit模拟构造函数未返回预期值,junit,constructor,testcase,jmockit,Junit,Constructor,Testcase,Jmockit,我试图对一个类进行单元测试,其中一个方法返回一个collaborator类的实例:根据其参数的值,它要么返回一个新创建的实例,要么返回一个保存的、以前创建的实例 我在期望中模拟构造函数调用,并将结果设置为一个值,该值是协作者的模拟实例。但是,当我使用参数值测试该方法时,会导致它创建一个新实例,模拟构造函数,因此该方法,不会返回预期值 我已将此简化为以下内容: package com.mfluent; import junit.framework.TestCase; import mockit.E
package com.mfluent;
import junit.framework.TestCase;
import mockit.Expectations;
import mockit.Mocked;
import mockit.Tested;
import org.junit.Assert;
import org.junit.Test;
public class ConstructorTest extends TestCase {
static class Collaborator {
}
static class ClassUnderTest {
Collaborator getCollaborator() {
return new Collaborator();
}
}
@Tested
ClassUnderTest classUnderTest;
@Mocked
Collaborator collaborator;
@Test
public void test() {
new Expectations() {
{
new Collaborator();
result = ConstructorTest.this.collaborator;
}
};
Collaborator collaborator = this.classUnderTest.getCollaborator();
Assert.assertTrue("incorrect collaborator returned", collaborator == this.collaborator);
}
}
如果您有任何关于此测试失败原因以及如何使其工作的想法,我们将不胜感激
提前感谢,
吉姆·伦克尔
高级技术人员
mFluent,Inc.LLC将
@Mocked
注释更改为@Capturing
,如下所示:
@Capturing
Collaborator collaborator;
这让我可以通过考试
在我看来,这有一点巫毒的魔力,但是如果你想读更多,请看JMockit教程
另请参见非常感谢您的帮助!当我将您的修复应用于我的真实测试用例时,它仍然不起作用。但经过更多的挖掘和实验,我终于能够让它工作了。问题是我必须捕获多个构造,所以我必须有多个捕获字段,每个字段都有一个maxInstances=1属性。不明显,但正如我所说,它是有效的。再次感谢你的帮助。Jim Renkel高级技术人员mFluent,Inc.LLCGreat,很高兴它为您工作。欢迎来到StackOverflow!相反,试着简单地使用
@Mocked Collaborator mock
。它将模拟类的所有实例(当前和将来)。通常,您只需指定协作者
对象的预期行为;不需要担心实例,除非您需要来自同一模拟类的不同实例的不同行为。