Имитация создания исключения для класса с поддельными доменами - PullRequest
0 голосов
/ 19 июля 2011

Я нахожусь в процессе написания модульных тестов для класса обслуживания Grails. Класс обслуживания использует несколько классов домена. Создание макетов для классов домена работает как чудо, используя метод mockDomain. Даже пути кода, которые проверяют, можно ли правильно сохранить объект домена (проверка домена), могут быть легко написаны. Однако в моем коде я также обернул операции над объектами домена блоком try/catch, который обрабатывает исключения. Есть ли способ смоделировать, что операция домена вызывает исключение? Это легко можно сделать с помощью фреймворков Mock, таких как Mockito (thenThrow) или EasyMock (andThrow), но я в основном ищу способ, родной для Grails. Я был бы открыт для фреймворков, дополняющих фреймворк Grails.

1 Ответ

1 голос
/ 19 июля 2011

Это просто, используя метаклассирование Groovy. В этом примере я скажу, что один из классов вашего домена - Foo.

void testFooThrowsException(){
    def fooInstance = new Foo()
    fooInstance.metaClass.methodToTest = {arg1, arg2->
        throw new CustomException("I'm an exception")
    }

    shouldFail CustomException, {fooInstance.methodToTest("val1", "val2")}
}

После того, как вы изменили метакласс экземпляра, этот экземпляр будет иметь измененное поведение для его полного жизненного цикла. Подробнее о метаклассировании на сайте Groovy. Это одна из самых крутых частей Groovy, IMO.

...