JMockit坚持单元测试

时间:2014-05-03 09:17:27

标签: java unit-testing junit jmockit

我使用JUnit进行单元测试。我使用JMockit来模拟单元测试中的一些java.util类:

   new MockUp<PrintWriter>() { //HERE UNIT TESTS HANG ON
        @SuppressWarnings("unused")
        @Mock(invocations = 5)
        public void print(String s) {
            System.out.print(s);
        }

        @SuppressWarnings("unused")
        @Mock(invocations = 1)
        public void flush() {}
    };

问题:我的单元测试只是挂在模型定义上。

问题:您可以设想问题吗?

我的依赖关系:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.jmockit</groupId>
        <artifactId>jmockit</artifactId>
        <version>1.7</version>
    </dependency>
</dependencies>

2 个答案:

答案 0 :(得分:2)

请看这个页面:

http://jmockit.googlecode.com/svn-history/r1123/trunk/www/installation.html

在第4步。

您可能缺少jmockit代理作为默认VM参数:

-javaagent:<path_to>\jmockit.jar

答案 1 :(得分:1)

下面的测试类适用于我,使用JMockit 1.7。

@RunWith(JMockit.class)
public class PrintWriterTest
{
    @Test
    public void useMockedPrintWriter() throws Exception {
        new MockUp<PrintWriter>() {
            @Mock(invocations = 5) void print(String s) { System.out.print(s); }
            @Mock(invocations = 1) void flush() {}
        };

        writeTextFileWithFiveLines();
    }

    void writeTextFileWithFiveLines() throws Exception {
        PrintWriter pw = new PrintWriter("temp.txt");
        pw.print("line1");
        pw.print("line2");
        pw.print("line3");
        pw.print("line4");
        pw.print("line5");
        pw.flush();
    }

    @Test
    public void useNonMockedPrintWriter() throws Exception {
        writeTextFileWithFiveLines();
    }
}

注1:不需要使用上述@RunWith(JMockit.class);它的优点是它不需要在类路径中的junit.jar之前使jmockit.jar将-javaagent:jmockit.jar作为JVM初始化参数。

注意2:上面使用的invocations = n约束完全是可选的。