Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Design, Quality, Testing > Как протестировать вызов аннотированого метода


Автор: CrasyMen 12.2.2014, 12:36
Код

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface RunThisMethod {
    int repeat();
}


Код

public class MyClass {

    public void firstMethod() {
    }

    @RunThisMethod(repeat = 4)
    public void secondMethod() {
        System.out.println("dfgsdgsdgs");
    }

    public void thirdMethod() {
    }
}


Код

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ObjectFactory {
    public static <T> T createObject(Class<T> aClass) throws IllegalAccessException, InstantiationException, InvocationTargetException {
        T instance = aClass.newInstance();

        for (Method method : aClass.getMethods()) {
            RunThisMethod methodAnnotation = method.getAnnotation(RunThisMethod.class);
            if (methodAnnotation != null) {
                for (int i = 0; i < methodAnnotation.repeat(); i++) {
                    method.invoke(instance);
                }
            }
        }

        return instance;
    }
}


Как протестировать что метод с аннотацией RunThisMethod был вызван repeat раз?

Код

import org.junit.Test;

public class ObjectFactoryTest {

    @Test
    public void annotatedMethodsShouldBeInvoked() throws Exception {
        ObjectFactory.createObject(MyClass.class);
    }
}

Автор: LSD 12.2.2014, 16:28
Цитата(CrasyMen @  12.2.2014,  13:36 Найти цитируемый пост)
Как протестировать что метод с аннотацией RunThisMethod был вызван repeat раз?

Если тестируется класс ObjectFactory, то надо просто создать кастомный класс который будет считать вызовы и проверять счетчик вызовов.
Если тестируется MyClass, то это не его зона ответвенности считать сколько раз его вызвали.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)