jmockit测试

来源:互联网 发布:淘宝买家金钻好处 编辑:程序博客网 时间:2024/04/30 09:00

本文使用的是jmockit作为测试的基石
系统环境
eclipse
jdk : 1.8
jmockit:1.31
junit:4.12

测试实例

本文没有介绍很多使用方法,仅仅推荐一种个人使用感觉很不错的方法仅供参考

准备代码

如下

@RestControllerpublic class MessageApp {    @Autowired    private MessageService messageService;    public void say(String name) {        System.out.println(messageService.say(name));        System.out.println(MessageSay.say(name));    }}
public class MessageSay {    public static String say(String name) {        return "staic + say " + name;    }}
public interface MessageService {    String say(String name);}
@Servicepublic class MessageServiceImpl implements MessageService {    @Override    public String say(String name) {        // TODO Auto-generated method stub        return "say " + name;    }}

普通接口和静态方法测试

测试代码如下

package jmockit.demo.test;import jmockit.demo.MessageService;import jmockit.demo.MessageSay;import mockit.StrictExpectations;import mockit.Tested;import jmockit.demo.MessageApp;import mockit.Injectable;import org.junit.Test;import mockit.integration.junit4.JMockit;import org.junit.runner.RunWith;/** * 类MessageAppTest.java的实现描述:TODO 类实现描述 *  * @author xupeng 2017年8月30日 下午6:27:03 */@RunWith(JMockit.class)public class MessageAppTest {    @Tested    private MessageApp     messageApp;    @Injectable    private MessageService messageService;    private String         name = "name";    @Test    public void test() {        new StrictExpectations(MessageSay.class) {            {                messageService.say(name);                result = name;                MessageSay.say(name);                result = "static demo";            }        };        messageApp.say(name);    }}

严格顺序测试

StrictExpectations是严格有序的打桩方案,测试方法 messageApp.say(name);中内部执行的每一个服务的每一次方法都需要提前进行打桩。这种方式可以完整严格的按着我们的思维测试代码,按着我们期望的一条总线一直走下去。每一步的信息我们都可以验证。

下面是一个对象验证的实例

 projectProductDao.insert(withArgThat(new BaseMatcher<ProjectProductDO>() {                    @Override                    public boolean matches(Object arg0) {                        ProjectProductDO productDO = (ProjectProductDO) arg0;                        if (!checkParam(productDO)) {                            return false;                        }                        if (!checkAmount(productDO)) {                            return false;                        }                        if (productDO.getProductCode().equals(oss)) {                            return true;                        }                        return false;                    }                    @Override                    public void describeTo(Description arg0) {                    }                }));

异常测试

补充一个异常验证的mock的写法,参考代码如下

package jmockit.demo.test;import org.junit.Test;import org.junit.Rule;import org.junit.rules.ExpectedException;public class ExceptionTest {    @Rule    public final ExpectedException thrown = ExpectedException.none();    @Test    public void test() {        thrown.expect(NoSuchMethodException.class);        //        thrown.expect(NullPointerException.class);        exceptionMethod(null);    }    private void exceptionMethod(Object obj) {        obj.toString();    }}
原创粉丝点击