JMockit:mock 接口


#Java Jmockit


方式1:MockUp 的 getMockInstance 方法

package demo;

public interface IPerson {
    String getName();
    int getAge();
}

package demo;

import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;

public class IPersonTest {

    @Test
    public void test() {
        MockUp<IPerson> mock = new MockUp<IPerson>() {
            @Mock
            public String getName() {
                return "xiaoming";
            }
            @Mock
            public  int getAge() {
                return 18;
            }
        };
        IPerson person = mock.getMockInstance();
        System.out.println(person.getName());
    }
}

MockUp 的 getMockInstance 方法在 Version 1.39 中被移除了(参考 https://jmockit.github.io/changes.html)。替换方案是,实现接口的一个空类,mock 空类,将其注入到需要使用的地方。

方式2:实现接口具体类,然后 mock

增加一个实现类:

package demo;

public class XiaoMing implements IPerson {

    @Override
    public String getName() {
        return "XiaoMing";
    }

    @Override
    public int getAge() {
        return 18;
    }
}

单测示例:

package demo;

import mockit.Expectations;

import org.junit.Test;

public class IPersonTest {

    @Test
    public void test() {
        IPerson person = new XiaoMing();
        new Expectations(person) {{
            person.getName(); result = "被mock了";
        }};
        System.out.println(person.getName());
    }
}

执行结果:

被mock了

方式3:Mocked + Expectations

用下面的方式:

package demo;

import mockit.Expectations;

import mockit.Mocked;
import org.junit.Test;

public class IPersonTest {

    @Test
    public void test(@Mocked IPerson person) {
        new Expectations() {{
            person.getName(); result = "xiaoming";
        }};
        System.out.println(person.getName());
    }
}

执行结果:

xiaoming


( 本文完 )