使用JMockit的JUnit测试用例失败java.lang.IllegalStateException:用于记录期望的无效上下文

时间:2014-12-18 00:22:35

标签: java junit jmockit expectations

@Test
public void testGetOnlyNewPartitions() throws Exception {
    setUp();
    new Expectations(){
        HiveUtil hiveUtil;
        {
            HiveUtil.getInstance(); returns(hiveUtil);
            hiveUtil.getAllpartitions(oldTable); returns(oldPartitions);
            hiveUtil.getAllpartitions(newTable); returns(newPartitions);
        }
    };
    PartitionFilter partitionFilter = new PartitionFilter(oldTable, newTable, HiveUtil.getInstance());
}

我正在测试PartitionFilter类,它使用单例类HiveUtil。

我的测试用例在运行时出现错误“java.lang.IllegalStateException:记录期望的无效上下文”失败。有关为何发生这种情况的任何解释?

这是我的pom.xml的相关部分:

<dependency>
         <groupId>org.jmockit</groupId>
         <artifactId>jmockit</artifactId>
         <version>1.13</version>
</dependency>

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
</dependency>

我试图将jmockit依赖项放在pom中的junit依赖项之前。那没用。

更多的研究表明我没有在课程开头使用@RunWith(JMockit.class)注释。 但是,当我尝试使用它时,我收到错误“类无法解析为类型”。我做了所有相关的进口。

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.junit.runner.*;

import mockit.*;
import mockit.integration.junit4.*;
import junit.framework.TestCase;

我做错了什么?

1 个答案:

答案 0 :(得分:1)

最新版本的JMockit(自1.7版本起)需要使用模拟注释来引入模拟类型/实例。此外,不再支持本地模拟字段。因此,测试应写成如下:

@Test
public void getOnlyNewPartitions(@Mocked final HiveUtil hiveUtil) throws Exception {
    setUp();

    new Expectations() {{
        hiveUtil.getAllpartitions(oldTable); result = oldPartitions;
        hiveUtil.getAllpartitions(newTable); result = newPartitions;
    }};

    PartitionFilter partitionFilter = 
        new PartitionFilter(oldTable, newTable, HiveUtil.getInstance());
}