Jmockit的小坑-eclipse和mvn命令行执行结果不一致的问题

之前用了不少Jmockit写用例,多数还好,但是之前出现了一些问题,主要的问题是一些用例,使用eclipse运行时ok的,但是用mvn命令进行测试确无法通过,错误的大致信息如下:

mockit.internal.expectations.invocation.MissingInvocation: 
Missing 1 invocation to:
com.xxx.RegionService#getByRegionId(0)
   on mock instance: com.xxx.RegionService.$Impl_RegionService@45430a27
	at com.xxx.core.xxx.SomeTest.testXXX(SomeTest.java:38)

是一个MissingInvocation,意思很简单,就是本来应该有一次调用,但实际上没有执行。信息不难理解,麻烦的是2种环境的测试结果不一致。方法的声明是这样的:

Region getByRegionId(Integer regionId);

我的测试代码时这样写的:

new Expectations(){
            {
            	
            	regionService.getByRegionId(3);
            	times = 1;
            	result = new RegionDTO(3,"县名称");
            }
        };

场景是这样的:regionService是个外部的dubbo服务,CUT里面,我需要根据地区的ID获取地区名称,会调用regionService.getByRegionId。 我在测试的时候使用Expectations来mock了getByRegionId的返回值。很简单的测试,但是测试结果在mvn命令行运行的时候始终无法执行通过。网上搜索了半天没什么结果。在之前我都用Mockito的mock对象代替了Jmockit这种打桩方式,可以通过,但毕竟是权宜之计。

   今天不是太忙,所以花时间解决了这个问题。其实也是搜索无果的情况下找出来的。原因就是getByRegionId方法接收的参数是Integer的对象类型(Integer),而我测试代码传递的是基础类型的值(3),命令行执行的时候,会认为这不是一个对象,没有算作真正调用了,导致了这个错误。最后我的测试代码写成了:

new Expectations(){
            {
            	
            	regionService.getByRegionId(new Integer(3));
            	times = 1;
            	result = new RegionDTO(3,"县名称");
            }
        };

即传参的时候使用了对象类型的参数值:regionService.getByRegionId(new Integer(3));,这样就可以通过了。

至于为什么在Eclipse下怎么写都能通过我是不得而知,谁如果知道的话,请不吝赐教。

猜你喜欢

转载自blog.csdn.net/yys79/article/details/86156281