Коллеги, день добрый.
Сейчас я работаю над "велосипедом", который проходит по коду тестов в формате TestNG и по аннтоациям генерирует описание тестовых случаев. Может быть кто-то уже решал подобную проблему и готов поделиться решением?
Коллеги, день добрый.
Сейчас я работаю над "велосипедом", который проходит по коду тестов в формате TestNG и по аннтоациям генерирует описание тестовых случаев. Может быть кто-то уже решал подобную проблему и готов поделиться решением?
а чем состоит оригинальная задача?
а вы пробовали javadoc http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html, чтобы неизобретать велосипед?
Михаил, спасибо за "наводку".
Задача стоит такая. Есть тест в TestNG:
@Test
public void test_01 () {
@TestCase Start Test to check smth.
CommonPart cp = new CommonPart();
cp.check(false);
@TestCase End Test to check smth.
}
Где-то есть класс
public class CommonPart {
public void check (boolean check) {
@TestCase Check in Check step 1
...
}
}
Нужно получить что-то вроде:
test_01
1. Start Test to check smth
2. Check in Check step 1
3. End Test to check smth
ну это я понял, что вам нужно написать такой код, вопрос зачем? для отчета?
а на каком шаге вы сейчас, и что уже сделали или не можете сделать?
такую задачу можно решить рефлексией
тут надо пользоваться рефлексией, вот эта ссылочка вам пригодиться http://tutorials.jenkov.com/java-reflection/annotations.html#method
public class TheClass { @MyAnnotation(name="someName", value = "Hello World") public void doSomething(){} }
и как доступиться к анотации метода
Method method = ... //obtain method object Annotation[] annotations = method.getDeclaredAnnotations();for(Annotation annotation : annotations){
if(annotation instanceof MyAnnotation){
MyAnnotation myAnnotation = (MyAnnotation) annotation;
System.out.println("name: " + myAnnotation.name());
System.out.println("value: " + myAnnotation.value());
}
}
или же если вам надо доступаться к аннотациям филдов, то вот так вот
public class TheClass {@MyAnnotation(name=“someName”, value = “Hello World”)
public String myField = null;
}
Field field = ... //obtain field object Annotation[] annotations = field.getDeclaredAnnotations();for(Annotation annotation : annotations){
if(annotation instanceof MyAnnotation){
MyAnnotation myAnnotation = (MyAnnotation) annotation;
System.out.println("name: " + myAnnotation.name());
System.out.println("value: " + myAnnotation.value());
}
}
К вопросу о том, зачем мне это - всё очень просто. Есть описание базовых тесткейсов, далее уходим в кодописательство и поддерживать описание кейсов - уже сложно, проще делать метки в коде и генерировать описание. Зачем это делается:
1. Ревью кейсов доступно всей команде, а не только девелоперам.
2. Отчетность.
3. Лёгкость поддержки документации.
4. Функциональный кавередж.
Понятно, что без рефлексии никуда. Просто нужно построить дерево всех вызовов методов из метода @Test, предусмотреть различные варианты. Код пишу в свободное от работы время и временами думаю о том, что все уже сделано до меня.
не думаю что можно что-то найти, может быть можно найти какой-то частный код для какого-то проекта, но я такого не видел
если люди хотят повысить читабельность тестов
тут или добавляют комментарии, чтобы можно было с помощью javadocs сгенерировать документацию
или уже подключают дополнительный уровень BDD,
где тесты уже показывают что они делают
и где специальные иснтрументы в виде JBehave, Thucydides, автоматечески строят правильные отчеты, чтобы их можно было читать всем
http://wakaleo.com/thucydides-sample-reports/index.html
если получиться какое-то решение буду рад увидеть код :)
Спасибо за ссылки, буду думать. На самом деле видел несколько реализаций подобной идеи. Надо смотреть - решать что подходит.
кинь тогда эти пару ссылок сюда, интересно посмотреть
Кое-как нашёл ссылку. Проект Bumblbee: https://code.launchpad.net/~daniel-brolund/bumblebee/main В целом что-то похожее на то, что я хочу:
p, li { white-space: pre-wrap; }
Bumblebee helps you distill available information from executing code (JUnit test cases) to provide human-friendly documentation with minimal effort and intrusion while providing maximum
expressive power, executional power, flexibility and extensibility