2015-07-10 1 views
0

Я пытаюсь написать единичный тест для метода, который принимает параметр .class.Как издеваться над методом, который проходит в clazz?

Например:

ExampleService { 
    def myExample(clazz){ 
     //do stuff and return some object 
    } 
} 

/* How the above function gets used */ 
AnotherExampleService extends exampleService { 


    def blah() { 
     def obj = myExample(AnotherClass.class) 
    } 
} 

/* Now I need to test the above blah() function */ 
AnotherExampleServiceSpec extends Specification { 
    def "test blah"() { 
     //The following doesn't seem to work 
     ExampleService.metaClass.myExample = { def arg1 -> obj } 
    } 
} 

Я довольно новыми для Groovy/Grails, поэтому любая помощь была бы оценена. Я в основном хочу знать, почему мой модульный тест, похоже, не работает, и как тестировать такую ​​функцию, которая принимает параметр экземпляра класса.
Благодарим за помощь!

ответ

0

Я бы, вероятно, подклассифицировал ExampleService в тесте. Так это выглядело как:

ExampleService { 
    def myExample(clazz){ 
     //do stuff and return some object 
    } 
} 

AnotherExampleService extends ExampleService { 
    def exampleService 

    def blah() { 
     def obj = myExample(AnotherClass) 
    } 
} 

AnotherExampleServiceSpec extends Specification { 
    def "test blah"() { 
     given: 
      AnotherExampleService service = new AnotherExampleService() { 
       @Override 
       def myExample(clazz){ 
       //whatever you want to do 
       return whatEverResult 
       } 
     when: 
      def result = service.blah (SomeClass) 
     then: 
      result 
    } 
} 

Как вы можете видеть, методы myExample замещается здесь, чтобы вернуть некоторое ложное значение, и нет возиться с метакласса :-) Для того, чтобы облегчить для Groovy вы можете явно указать тип входа, например, def myExample(Class clazz).

+0

Спасибо за ответ. К сожалению, я допустил ошибку в своем исходном сообщении, где у меня был примерСервис в качестве поля в AnotherExampleService, вместо этого я расширил службу AnotherExampleService с помощью exanpleService. Как я могу это сделать? – waterbottle27

+0

Пожалуйста, обновите вопрос, чтобы было ясно, в чем проблема. Ура! – defectus

+0

Сделано! Мое первоначальное сообщение обновлено. – waterbottle27