Junit jmockit模拟构造函数未返回预期值

Junit jmockit模拟构造函数未返回预期值,junit,constructor,testcase,jmockit,Junit,Constructor,Testcase,Jmockit,我试图对一个类进行单元测试,其中一个方法返回一个collaborator类的实例:根据其参数的值,它要么返回一个新创建的实例,要么返回一个保存的、以前创建的实例 我在期望中模拟构造函数调用,并将结果设置为一个值,该值是协作者的模拟实例。但是,当我使用参数值测试该方法时,会导致它创建一个新实例,模拟构造函数,因此该方法,不会返回预期值 我已将此简化为以下内容: package com.mfluent; import junit.framework.TestCase; import mockit.E

我试图对一个类进行单元测试,其中一个方法返回一个collaborator类的实例:根据其参数的值,它要么返回一个新创建的实例,要么返回一个保存的、以前创建的实例

我在期望中模拟构造函数调用,并将结果设置为一个值,该值是协作者的模拟实例。但是,当我使用参数值测试该方法时,会导致它创建一个新实例,模拟构造函数,因此该方法,不会返回预期值

我已将此简化为以下内容:

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
。它将模拟类的所有实例(当前和将来)。通常,您只需指定
协作者
对象的预期行为;不需要担心实例,除非您需要来自同一模拟类的不同实例的不同行为。