Grails 单元测试 - 在每个闭包中模拟 findAllBy() 方法

Grails Unit testing - mock findAllBy() method with each closure

我想对服务中的功能进行单元测试 class。

服务 class 如下所示:

    class FooService{ 

    Double getFoo(SomeClass class){
      Double returningValue = 0.0
      String parameter

      SomeClass.findAllByCodeLike(parameter).each{
        Double amount = someOtherFooServiceMethod(it,it.someClassAttribute?.intValue())
        if(amount){
         returningValue += amount;
         }
       }
     }

    }



我知道如何模拟 SomeClass.findAllByCodeLike(参数)。我用 SomeClass.metaClass.static.findAllByCodeLike() 嘲笑它并给这个函数赋值。

但我不知道如何模拟 .each{}。 有办法吗?

到目前为止,我正在模拟大量域 classes 来测试此方法,并将域 classes 保存到内存数据库中。如果我找到一种方法来模拟 SomeClass.findAllByCodeLike(parameter).each{...} 我可以通过大量代码减少 TestClass。

您不必嘲笑 each{}。你应该简单地让你的 findAllByCodeLike 模拟 return 值列表:

SomeClass.metaClass.static.findAllByCodeLike = { code -> [ new SomeClass(...), new SomeClass(...), ... ] }
//...
SomeClass.findAllByCodeLike(parameter).each{ 
  doStuff it
}