java泛型抽象类,由于方法在使用泛型方法的抽象类中,Mockito在NoSuchMethodError上失败...

我正在进行一些服务测试,我正在测试一个从使用泛型的类扩展的具体类 .

服务层的示例设置如下:

public abstract class AbstractService {

public void deleteAllItems(E entity) {

List items = new ArrayList(entity.getItems());

for(IT item : items) {

//Yada, yada

}

}

}

public class Service extends AbstractService {

}

public class OtherService() {

@Inject

private ServiceManager serviceManager;

public void deleteItems(Entity e) {

serviceManager.getService().deleteAllItems(e);

}

}

然后测试它我有以下内容:

public class Test {

private Service service;

private OtherService otherService;

private ServiceManager serviceManager;

@BeforeMethod

public void setup() {

serviceManager= mock(serviceManager.class);

service= mock(Service.class);

when(serviceManager.getService()).thenReturn(service);

otherService=injector.getInstance(OtherService.class);

}

@Test

public void test() {

Entity e = new Entity();

//Attach some items

otherService.deleteItems(e);

verify(service).deleteAllItems(e);

}

}

这应该调用 OtherService ,它存在(我们使用注入来获取对象),然后调用方法 deleteItems() ,而后者应该在 Service 上调用 deleteAllItems() . 在我实现Java泛型之前,这很好用,但是由于我已经实现了Java泛型,因此Mockito测试失败并出现以下异常:

java.lang.NoSuchMethodError:Service.deleteAllItems(Entity;)V at Test.test(Test.java:XXX)org.mockito.exceptions.misusing.UnfinishedVerificationException:缺少方法调用验证(mock): - > at Test .test(Test.java:XXX)正确验证的示例:verify(mock).doSomething()此外,此错误可能会显示,因为您验证了:final / private / equals()/ hashCode()方法 . 这些方法无法进行存根/验证 .

听起来似乎无法找到方法 . 我是应该嘲笑 AbstractService 的抽象类还是还有其他我缺少的东西?

EDIT

从我所看到的Mockito内部工作方式来看,它创建了一个这样的实例:

public void AbstractService.deleteAllItems(Entity)

对于 MockitoMethod 对象,这样才有意义 Service.deleteAllItems() "isn't called",看来Mockito假设只调用了基类 . 所以看来我需要模拟基类 . 我对这些建议持开放态度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值