使用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中,我不想使用模拟并调用TestAccess.java如下
@Test
public void doTest()
{
    TestAccess test=TestAccess.getTestAccess();
}
B.java如果独立运行,则返回真正的TestAccess实例,并且可以正常工作。

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

任何人都可以指导如何解决。

最佳答案

同样,您的示例甚至都不会运行,因为模拟测试访问字段上的@Mock注释无效。我猜应该是@Mocked吗?如果是这样,则无需额外使用new MockUp(),因为@Mocked上的mockTestaccess将已经在该测试类的测试过程中模拟掉了TestAccess的所有实例,之后将自动还原。如果您遇到的问题是,getTestAccess()返回TestAccess的某个子类,那么它不是模拟的实例,您可能想看看@Capturing,它也模拟了子类的实例。

关于java - JMockit模拟不会被销毁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39244089/

10-10 05:32