Модульное тестирование Grails - макет метода findAllBy () с каждым замыканием - PullRequest
0 голосов
/ 13 января 2020

Я хочу выполнить модульное тестирование функции в классе обслуживания.

Класс обслуживания выглядит следующим образом:

    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.stati c .findAllByCodeLike () и присвоил этой функции значение.

Но я не знаю, как насмехаться над .each {} . Есть ли способ сделать это?

К настоящему времени я высмеиваю множество классов домена, чтобы протестировать этот метод, а также сохранить классы домена в базе данных в памяти. Если я найду способ издеваться над SomeClass.findAllByCodeLike (параметр) .each {...} , я могу уменьшить TestClass большим количеством кода.

1 Ответ

1 голос
/ 13 января 2020

Вам не нужно издеваться над each{}. Вы просто должны заставить свой findAllByCodeLike макет вернуть список значений:

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