2012-01-31 2 views
2

Я обычно использую Mixins в тестовом коде для совместного использования методов утилиты в тестах. У меня есть тест, который я написал, который имеет @TestFor и @Mixin. Поведение, которое я вижу, это то, что когда у меня есть аннотация @TestFor, тест не видит мой код @Mixin и дает мне MissingMethodException при его исполнении. Когда я удаляю @TestFor, он отлично работает. Ниже приведен упрощенный пример того, что я пытаюсь сделать.Тест модулей Grails 2.0 с использованием @TestFor и @Mixin

@Mixin(TagLibTestUtils) 
@TestFor(ErrorMessageTagLib) 
class ErrorMessageTagLibTests { 

    @Test 
    void stuff() { 
     something() 
    } 
} 

class TagLibTestUtils { 

    def something() { 
     println ">>> HERE" 
    } 
} 

Так что мой вопрос, это сделать @Mixin и @TestFor аннотаций не работают вместе? Или я делаю что-то не так?

ответ

4

Предполагая, что вы используете Grails 2.0, вы должны @TestMixin вместо @Mixin.

Если вы посмотрите на source for the TestFor, вы увидите этот комментарий:

/** 
* Used to indicate the class under test. Triggers the @TestMixin AST transform for the given artefact type. 
* 
* @author Graeme Rocher 
* @since 2.0 
*/ 
+0

Это работает, спасибо! Любое понимание того, почему было сделано изменение для использования TestMixin? –

+0

Боюсь, я не знаю. Возможно, им понадобилось другое [RetentionPolicy] (http://docs.oracle.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html), чем то, что установлено для @Mixin. Возможно, они просто хотели, чтобы это было частью пакета grails.test, а не 'groovy.lang' –

+0

Прохладный, спасибо. Я буду награждать вас завтрашней раздачей, как только это позволит мне это сделать :) –