2009-07-31 3 views
0

Я новичок в тестировании в Grails, поэтому я не уверен, что я принимаю правильный подход. Я пытаюсь выполнить единую проверку службы (назовите ее FooService), которая имеет экземпляр другого класса (назовите его «Бар») как свойство. В основном что-то вроде:Выкапывающие конструкторы в Grails

class FooService { 
Bar bar 

void afterPropertiesSet() { 
    bar = new Bar() 
} 
} 

Итак, я пытаюсь проверить метод afterPropertiesSet, и, как я понимаю, правильная практика для модульных тестов издеваться вне класса. Итак, как, в FooServiceTests расширяет GrailsUnitTestCase, я высмеиваю конструктор Bar?

Thanks

ответ

0

У вас нет.

EasyMock зависит от прокси, а это означает интерфейс. Если Бар не может быть интерфейсом, это не кандидат для проксирования.

Вы бы издевались над чем-то вроде DAO или другой внешней зависимости, которую вы уже тестировали, чтобы ваш FooServiceTest не стал интеграционным тестом, а Bar? №

«... правильная практика для модульных испытаний заключается в том, чтобы издеваться над внешними классами ...» - я считаю, что это неверно. Издевательский для каждого объекта слишком затягивает идею.

+0

спасибо. У меня было ощущение, что я могу слишком далеко отнести парадигму :-) – 2009-08-01 02:04:45

0

Если вам нужно или хотите высмеять конструктор Bar, вы можете.

Используя JMockit, вы могли бы написать (в Java ниже, см here об использовании его с Groovy):


import org.junit.*; 
import org.junit.runner.*; 

import mockit.*; 
import mockit.integration.junit4.*; 

@RunWith(JMockit.class) 
public class FooServiceTest 
{ 
    @Test 
    public void afterPropertiesSet() 
    { 
     new Expectations() 
     { 
      Bar mockBar; 

      { 
       new Bar(); // records expectation for the Bar constructor 
      } 
     }; 

     // Will call a mocked "Bar()": 
     new FooService().afterPropertiesSet(); 
    } 
} 
1

Ответ слишком поздно, но если кто-то хочет, чтобы в будущем.

  def barObj 
      def barCtrl= mockFor(Bar) 
      Bar.metaClass.constructor = { -> 
       barObj=[:] 
       return barObj 
      } 

when: 
     service.afterPropertiesSet() 

     then: 
     assert barObj == //check the properties