Я разработал бы приложение для имения как можно большей работы, сделанной в запросах и в vba подпрограммах так, чтобы тестирование могло быть составлено из заполнения тестовых баз данных, рабочих наборов производственных запросов и vba против тех баз данных и затем рассмотрения вывода и сравнения, чтобы удостовериться, что вывод хорош. Этот подход не тестирует GUI, очевидно, таким образом, Вы могли увеличить тестирование с рядом сценариев тестирования (здесь, я имею в виду как документ слова, в котором говорится открытая форма 1, и нажмите управление 1), которые вручную выполняются.
Это зависит от объема проекта как уровень автоматизации, необходимой для аспекта тестирования.
экземпляр метода
. Что-то вроде:
Method m = getClass().getMethod("myMethod");
MyAnnotation a = m.getAnnotation(MyAnnotation.class);
MyValueType value1 = a.attribute1();
Вам нужно будет поймать / конечно, обрабатывать соответствующие исключения. Вышеупомянутое предполагает, что вы действительно получаете метод из текущего класса (замените getClass ()
на Class.forName ()
в противном случае), и рассматриваемый метод является общедоступным (используйте getDeclaredMethods ()
если это не так)
Две важные вещи:
RUNTIME
, чтобы вы могли получить доступ к аннотации по адресу время выполнения. По умолчанию используется время компиляции, что означает, что аннотации доступны в файле класса, но не могут быть доступны во время выполнения с использованием отражения. Полный пример:
@Retention(RetentionPolicy.RUNTIME)
public static @interface MyAnnotation {
String value1();
int value2();
}
@Test
@MyAnnotation(value1 = "Foo", value2 = 1337)
public void testAnnotation() throws Exception {
Method[] methods = getClass().getMethods();
Method method = methods[0];
assertEquals("testAnnotation", method.getName());
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
assertEquals("Foo", annotation.value1());
assertEquals(1337, annotation.value2());
}
@mhaller: слишком долго для комментария к вашему сообщению. Очевидно, потребуется дальнейшая доработка для работы с перегруженными методами, но это возможно. [
]import java.lang.reflect.Method;
public class Hack {
public static void main (String[] args) {
(new Hack()).foobar();
}
public void foobar () {
Method here = getCurrentMethod(this);
System.out.format("And here we are: %s\n", here);
}
public static final Method getCurrentMethod(Object o) {
String s = Thread.currentThread().getStackTrace()[2].getMethodName();
Method cm = null;
for(Method m : o.getClass().getMethods()){
if(m.getName().equals(s)){
cm = m; break;
}
}
return cm;
}
}
[править: кредит / спасибо Александру Приймаку за обнаружение ошибки в main ()]