1

我有一个名为 User 的域类。运行测试时,我想通过执行以下操作重新定义 User 类的 get 方法

User.metaClass.static.get = {Long id -> [username:"joe", id:id]}

但是当我打电话时,应用上述内容似乎没有影响

用户.get(2)

我可以在 get() 或 list() 等静态 Domain GORM 方法中使用 metaClass 来改变它们的行为吗?谢谢

这是我的测试用例:

@测试

无效测试我(){

  User.metaClass.static.get = { id -> [username:"joe", id:id]}

  def user  = User.get(3)

  assert user.username == "joe"

}

我得到一个 NPE 无法在空对象上获取属性“用户名”

我实际上可以使用 groovy MockFor

  def mockControl = new MockFor(User.class)

  mockControl.demand.get {id -> return [username:"joe"]}

  mockControl.use {

      def user = User.get(3)

      assert user.username == "joe"
  } 
4

2 回答 2

0

不要输入闭包参数。如果您要在编写时使用该方法,则需要调用User.get(2L),否则您将传递一个 Integer 并且签名不匹配。如果您定义get为,它应该可以工作

User.metaClass.static.get = { id -> [username:"joe", id:id]}
于 2013-09-20T19:49:12.990 回答
0

尝试将以下注释添加到您的测试中

@Mock([User])

然后你可以做这样的事情:

def userControl = mockFor(User)
userControl.demand.static.get() {Long id -> return null}

于 2013-09-20T21:02:23.413 回答