JMockit模拟未被销毁

4

使用JUnit测试类 -

有一个名为TestAccess.java的类,其中包含

static private TestAccess instance = new TestAccess();
public static TestAccess getTestAccess() {
    returns instance;
}

为了测试一个测试类 A.java,使用 JMockit 来模拟 getTestAccess 方法

@Mock
TestAccess mockTestaccess;    

@Test
public void testMethod() {
    new MockUp<TestAccess>() {
        @mockit.Mock
        public TestAccess getTestAccess() {
            return mockTestaccess;
        }
    };

    TestAccess test=TestAccess.getTestAccess();
}

在另一个类 B.java 中,我不想使用 mock 并调用 TestAccess.java 如下:

@Test
public void doTest()
{ 
    TestAccess test=TestAccess.getTestAccess();
}

B.java如果独立运行,会返回真正的TestAccess实例并且能够正常工作。

但是在maven运行期间,即使是在B.java中,TestAccess.getTestAccess()也会返回在A.java中定义的模拟对象而不是预期的真实实例。

请问有谁能指导如何解决这个问题。

1个回答

1

我觉得你的示例甚至无法运行,因为mockTestaccess字段上的@Mock注释是无效的。我猜应该是@Mocked?如果是这样,就没有必要额外使用new MockUp(),因为mockTestaccess上的@Mocked将在测试期间自动模拟掉所有TestAccess的实例,并且在测试类之后会自动还原。如果你的问题是getTestAccess()返回TestAccess的某个子类,那么它不是模拟实例,你可能需要看一下@Capturing,它也会模拟子类的实例。


我正在使用Junit进行单元测试。使用@mock(org.mockito.Mock)来模拟实例。由于我想要模拟静态方法,所以使用了jMockito(mockit.MockUp)。已经编辑了上述语句,包括我错过的mockit.MockUp。此外,测试用例确实运行。 - user5591691
1
你在混合使用两个不同的模拟框架?为什么这样做?我建议不要混用模拟框架,而是只使用JMockit。 - Vampire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接