我有一个名为User的Domain类。 运行测试时,我想通过执行以下操作重新定义User类的get方法
User.metaClass.static.get = {Long id - > [username:“joe”,id:id]}
但是当我打电话给
时,应用上述内容似乎没有影响User.get(2)
我可以在静态域GORM方法(如get()或list())中使用metaClass来改变它们的行为吗? 感谢
这是我的testCase:
@Test
void testMe(){
User.metaClass.static.get = { id -> [username:"joe", id:id]} def user = User.get(3) assert user.username == "joe"
}
我得到一个NPE无法在null对象上获取属性'username'
我实际上可以使用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" }
答案 0 :(得分:0)
不要输入closure参数。如果您在编写时使用该方法,则需要调用User.get(2L)
,否则您将传递整数并且签名不匹配。如果您将get
定义为
User.metaClass.static.get = { id -> [username:"joe", id:id]}
答案 1 :(得分:0)
尝试将以下注释添加到测试中
@Mock([User])
然后你可以这样做:
def userControl = mockFor(User)
userControl.demand.static.get() {Long id -> return null}