Конструкторы в Граале - PullRequest
0 голосов
/ 01 августа 2009

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

class FooService {
 Bar bar

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

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

Спасибо

Ответы [ 3 ]

1 голос
/ 27 сентября 2017

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

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

 when:
        service.afterPropertiesSet()

        then:
        assert barObj == //check the properties
0 голосов
/ 02 августа 2009

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

Используя JMockit , вы могли бы написать (в Java ниже, здесь об использовании его с 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();
    }
}
0 голосов
/ 01 августа 2009

Ты не.

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

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

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

...