Spock 存根匹配部分参数

Spock stub matching partial arguments

我正在为我的测试用例使用 spock,并且我正在对 class 进行存根,如下所示,inventryDAO 有一个方法 getUser,它接受 PersistableKey 类型的参数。

在主代码中,参数创建如下

PersistableKey userKey = new PersistableKey(1)
userKey.setRepresentedObjectClass(User.class);

在我的规范中,如果我按如下方式编写存根和参数,它工作正常

User collUser = new User(1);
InventoryDAO inventoryDAO = Stub()

PersistableKey userKey = new PersistableKey(1)
userKey.setRepresentedObjectClass(User.class);

inventoryDAO.getUser(userKey) >> collUser

但我真正想做的是能够在不设置 setRepresentedObjectClass 的情况下传递参数,就像这样

User collUser = new User(1);
InventoryDAO inventoryDAO = Stub()
    
PersistableKey userKey = new PersistableKey(1)
    
inventoryDAO.getUser(userKey) >> collUser

是否可以根据部分值匹配参数?

Spock 支持多种 Argument Constraints, when you use an object you are using the Equality Constraint,它使用 groovy 等式来比较约束参数和来自调用的参数。如果您不能或不想更改 PersistableKeyequals 方法,那么您可以使用 Code Argument Constraint.

inventoryDAO.getUser({ userKey.id == 1 }) >> collUser

您还可以将 Code Argument Constraint 类型约束结合使用

inventoryDAO.getUser({ userKey.id == 1 } as PersistableKey) >> collUser