#java #junit #junit4
#java #junit #junit4
Вопрос:
Допустим, у меня есть два тестовых класса, помеченных соответствующими категориями:
@Category({CategoryA.class})
public class A {
...
}
и
@Category({CategoryB.class})
public class B {
...
}
которые имеют общую кодовую базу и отличаются только 1 строкой метода тестирования.
Какой был бы наилучший подход, чтобы сделать этот код лучше?
Например, если я использую только один класс:
@Category({CategoryA.class, CategoryB.class})
public class AB {
...
}
Есть ли какой-либо способ определить категорию во время выполнения и добавить простой оператор if?
Ответ №1:
По какой-либо причине у вас не может быть абстрактного класса, который выполняет большую часть работы, затем двух расширяющихся классов и имеет разные @Category
аннотации? Что-то вроде:
public abstract class ABParent {
protected abstract void thingThatsDifferent();
}
@Category(CategoryA.class)
public class A extends ABParent {
@Override
protected void thingThatsDifferent() {
System.out.println("Woof");
}
}
@Category(CategoryB.class)
public class B extends ABParent {
@Override
protected void thingThatsDifferent() {
System.out.println("Meow");
}
}
Комментарии:
1. Конечно, я думал об этом, но для этого требуется иметь 3 класса вместо 1, просто для реализации этой очень простой логики
2. Well
Categories
— это набор, который не определяет@Category
динамически. Вы могли бы расширить этот класс и заставить его делать это. Но я не думаю, что «количество классов» должно быть показателем, которым вы должны руководствоваться при написании кода лично.3. Кроме того,
@Category
аннотация может относиться к отдельным методам тестирования, а не только к классу (при условии, что класс не являетсяParameterized
тестом junit.