2013-04-03 4 views
3

У меня есть две логические категории тестов: простые функциональные модульные тесты (пропуск/сбой) и тесты производительности, которые только для показателей/диагностики.Использование категорий JUnit и просто организация тестов в отдельных классах

В настоящее время у меня есть все методы испытаний в одном классе, называют его MyTests:

public class MyTests 
{ 
    @Test 
    public void testUnit1() 
    { 
     ... 

     assertTrue(someBool); 
    } 

    @Test 
    public void testUnit2() 
    { 
     ... 

     assertFalse(someBool); 
    } 

    @Test 
    @Category(PerformanceTest.class) 
    public void bmrkPerfTest1() 
    { 
     ... 
    } 

    @Test 
    @Category(PerformanceTest.class) 
    public void bmrkPerfTest2() 
    { 
     ... 
    } 
} 

Тогда у меня есть UnitTestSuite определяется как

@RunWith(Categories.class) 
@Categories.ExcludeCategory(PerformanceTest.class) 
@SuiteClasses({ MyTests.class }) 
public class UnitTestSuite {} 

и PerformanceTestSuite

@RunWith(Categories.class) 
@Categories.IncludeCategory(PerformanceTest.class) 
@SuiteClasses({ MyTests.class }) 
public class PerformanceTestSuite {} 

, чтобы я мог запускать модульные тесты в Ant отдельно от тестов производительности (я не думаю, что в том числе код Ant необходим).

Это означает, что у меня есть в общей сложности четыре класса (MyTests, PerformanceTest, PerformanceTestSuite и UnitTestSuite). Я понимаю, что я мог бы просто поместить все модульные тесты в один класс и провести тесты в другом классе и сделать это без дополнительной сложности с категориями и дополнительными аннотациями. Я вызываю тесты по имени класса в Ant, т. Е. Не запускает все тесты в пакете.

Имеет ли смысл и в чем причины, чтобы держать его организованным по категориям с аннотацией, или было бы лучше, если бы я просто переработал его в двух простых классах тестов?

ответ

5

К вопросу о том, чтобы разделить тесты в двух классах:

Как они явно очень разные виды испытаний (модульных тестов и тестов производительности), я бы поставил их в разные классы в любом случае , только по этой причине.

Некоторые дальнейшие размышления:

Я не думаю, что с помощью @Category аннотаций это плохая идея, однако. То, что я сделал бы, в более типичном проекте с десятками или сотнями классов, содержащих тесты, комментирует тест классы (вместо методов) с @Category, затем use the ClassPathSuite library, чтобы избежать дублирования усилий по категоризации тестов. (И, возможно, run the tests by category using Ant.)

Если у вас будут только два класса испытаний, это, конечно, не имеет большого значения. Вы можете хранить категории и сюиты или выбросить их (как вы сказали, тесты выполняются по имени класса в Ant), если у вас есть лишние классы. Я бы сохранил их и перешел к описанному выше сценарию, как обычно (в здоровом проекте) с течением времени будет накоплено больше тестов. :-)

1

Если у вас есть только два класса тестов, это, вероятно, не имеет значения. Проект, над которым я работаю, имеет 50-60 классов. Листинг их по имени будет исчерпывающим. Вы можете использовать шаблоны имен файлов, но я считаю, что аннотации более чистые.

Смежные вопросы