我在测试用例中使用 spock,并按如下方式存根一个类,inventryDAO 有一个 getUser 方法,它接受 PersistableKey 类型的参数。
在主代码中,参数创建如下
PersistableKey userKey = new PersistableKey(1)
userKey.setRepresentedObjectClass(User.class);
Run Code Online (Sandbox Code Playgroud)
在我的规范中,如果我按如下方式编写存根和参数,则效果很好
User collUser = new User(1);
InventoryDAO inventoryDAO = Stub()
PersistableKey userKey = new PersistableKey(1)
userKey.setRepresentedObjectClass(User.class);
inventoryDAO.getUser(userKey) >> collUser
Run Code Online (Sandbox Code Playgroud)
但我真正想做的是能够在不设置 setRepresentedObjectClass 的情况下传递参数,如下所示
User collUser = new User(1);
InventoryDAO inventoryDAO = Stub()
PersistableKey userKey = new PersistableKey(1)
inventoryDAO.getUser(userKey) >> collUser
Run Code Online (Sandbox Code Playgroud)
是否可以根据部分值匹配参数?
Spock 支持多种类型的Argument Constraints,当您使用对象时,您正在使用Equality Constraint,它使用 groovy equals 来将约束参数与调用中的参数进行比较。如果您不能或不想更改equals的方法,那么您可以使用代码参数约束PersistableKey手动比较与您相关的字段
。
inventoryDAO.getUser({ userKey.id == 1 }) >> collUser
Run Code Online (Sandbox Code Playgroud)
inventoryDAO.getUser({ userKey.id == 1 } as PersistableKey) >> collUser
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3527 次 |
| 最近记录: |