java存根_java-使用Mockito存根并执行测试方法

短答案

在您的情况下该如何做:

int argument = 5; // example with int but could be another type

Mockito.when(mockMyAgent.otherMethod(Mockito.anyInt()).thenReturn(requiredReturnArg(argument));

长答案

实际上,至少在Java 8中,您可能想做的事情是可能的。也许您没有得到其他人的回答,因为我使用的Java 8允许这样做,而这个问题是在Java 8发布之前的(允许传递函数) ,不仅是其他函数的值)。

让我们模拟对数据库查询的调用。 此查询返回具有FreeRoms = X和StarNumber = Y的HotelTable的所有行。我在测试过程中期望的是,该查询将返回不同酒店的列表:每个返回的酒店都具有相同的值X和Y,而其他值则由我根据自己的需要决定。 以下示例很简单,但是您当然可以使其更复杂。

因此,我创建了一个函数,该函数将返回不同的结果,但是所有函数都具有FreeRoms = X和StarNumber =Y。

static List simulateQueryOnHotels(int availableRoomNumber, int starNumber) {

ArrayList HotelArrayList = new ArrayList<>();

HotelArrayList.add(new Hotel(availableRoomNumber, starNumber, Rome, 1, 1));

HotelArrayList.add(new Hotel(availableRoomNumber, starNumber, Krakow, 7, 15));

HotelArrayList.add(new Hotel(availableRoomNumber, starNumber, Madrid, 1, 1));

HotelArrayList.add(new Hotel(availableRoomNumber, starNumber, Athens, 4, 1));

return HotelArrayList;

}

也许Spy更好(请尝试),但是我在一个模拟的类上做到了。 这是我的操作方法(注意anyInt()值):

//somewhere at the beginning of your file with tests...

@Mock

private DatabaseManager mockedDatabaseManager;

//in the same file, somewhere in a test...

int availableRoomNumber = 3;

int starNumber = 4;

// in this way, the mocked queryOnHotels will return a different result according to the passed parameters

when(mockedDatabaseManager.queryOnHotels(anyInt(), anyInt())).thenReturn(simulateQueryOnHotels(availableRoomNumber, starNumber));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值