java .stub 用法_java – Mockito:如何在调用时使用stub方法运行一些代码

我想存根一个存储库类来测试另一个具有存储库的类(Holder类).存储库接口支持CRUD操作,并且有很多方法,但我对Holder类的单元测试只需要调用其中的两个.存储库界面:

public interface IRepo {

public void remove(String... sarr);

public void add(String... sarr);

//Lots of other methods I don't need now

}

我想创建一个存储库模拟,它可以存储实例,定义仅用于添加和删除的逻辑,还提供了一种在调用添加和删除后检查存储在其中的内容的方法.

如果我做:

IRepo repoMock = mock(IRepo.class);

然后我有一个愚蠢的对象,对每种方法都没有任何作用.没关系,现在我只需要定义添加和删除的行为.

我可以创建一个Set< String>和存根只有那两个方法来处理集合.然后我将实例化一个具有IRepo的Holder,注入部分存根模拟,并在执行持有者之后,检查该集以验证它包含它应该是什么.

我设法使用不推荐使用的方法stubVoid部分地删除了一个void方法,例如remove:

Set mySet = new HashSet<>();

stubVoid(repoMock).toAnswer(new Answer() {

@Override

public Void answer(InvocationOnMock invocation) throws Throwable {

Object[] args = invocation.getArguments();

String[] stringsToDelete = (String[]) args[0];

mySet.removeAll(Arrays.asList(stringsToDelete));

return null;

}

}).on().remove(Matchers.anyVararg());

但是已被弃用,并且它比为IRepo创建部分实现要好得多.有没有更好的办法?

注意:Java 7只应答,这应该在Android中运行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
com.miui.frameworks.servicestests (1 Test) [1/1] com.android.server.location.gnss.hal.Gpo4ClientTest#init: FAILED (141ms) STACKTRACE: java.lang.SecurityException: uid 10289 does not have android.permission.ACCESS_COARSE_LOCATION or android.permission.ACCESS_FINE_LOCATION. at android.os.Parcel.createExceptionOrNull(Parcel.java:3011) at android.os.Parcel.createException(Parcel.java:2995) at android.os.Parcel.readException(Parcel.java:2978) at android.os.Parcel.readException(Parcel.java:2920) at android.location.ILocationManager$Stub$Proxy.registerLocationListener(ILocationManager.java:1291) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1551) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1234) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:1199) at com.android.server.location.gnss.hal.Gpo4Client.registerPassiveLocationUpdates(Gpo4Client.java:198) at com.android.server.location.gnss.hal.Gpo4Client.init(Gpo4Client.java:78) at com.android.server.location.gnss.hal.Gpo4ClientTest.init(Gpo4ClientTest.java:209) ... 8 trimmed Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.location.LocationPermissions.enforceLocationPermission(LocationPermissions.java:116) at com.android.server.location.LocationManagerService.registerLocationListener(LocationManagerService.java:786) at android.location.ILocationManager$Stub.onTransact(ILocationManager.java:582) at android.os.Binder.execTransactInternal(Binder.java:1285) at android.os.Binder.execTransact(Binder.java:1249)
06-01

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值