2016-04-29 6 views
2

Я новичок в JUnit. Ниже приведена иерархия классов, в которой классы в верхней и нижней частях иерархии имеют методы @Test. Когда я выполняю целую цепочку, ConverterBaseEnquiryTest, которая находится в середине иерархии, также выполняется. (Это мое предположение, потому что я вижу исключение в surefire отчетах с этим именем). И я получаю ошибки инициализации от ConverterBaseEnquiryTest, потому что это не должно было быть выполнено. Есть ли способ выяснить, почему это происходит? Пожалуйста, дайте мне знать, если что-нибудь еще, я должен войти в вопрос, чтобы построить больше понимания.Тест JUnit выполняется, когда он не должен

Ниже моя иерархия:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { 
    "classpath:spring/test-default-context.xml" 
}) 
@TransactionConfiguration(transactionManager="profile.transactionManager", defaultRollback=false) 
@Ignore 
public class BaseCommonTest extends AbstractTransactionalJUnit4SpringContextTests { 


abstract public class ConverterBaseTest<F,T> extends BaseCommonTest { 
    // ... 
} 

public class ConverterBaseEnquiryTest<F, T> extends ConverterBaseTest<Enquiry, T> { 
    // ... 
} 

public class EnquiryToDvsMedicareRequestConverterTest extends ConverterBaseEnquiryTest<Enquiry, DvsMedicareRequest> { 
    // ... 
} 
+0

Чтобы уточнить исключение: когда я запустил тест из запроса EnquiryToDvsMedicareRequestConverterTest, он удовлетворит оба требования типа . Но когда запущен ConverterBaseEnquiryTest, у него нет обоих типов. И вот откуда это исключение. – amit

+1

Пожалуйста, разместите команды, которые вы используете для запуска тестов, а также журнал из прогона. Также поможет конфигурация плагина surefire от вашего pom. –

+0

Замечание: многие люди говорят, что вам действительно нужно держаться подальше от использования «наследования» в качестве «общего кода» для модульных тестов. Я частично согласен с этим; и мой намек на вас: даже когда это требует «более кодирования»; старайтесь избегать сложных моделей «наследования» для вашего тестового кода ... по крайней мере изначально; и только начинайте использовать такие вещи, когда вы более глубоко разбираетесь в теме «модульного тестирования». – GhostCat

ответ

1

Я думаю, это потому, что @Ignore аннотации не наследуемые, так JUnit будет выполнять тесты в подклассах. (Хотя публикация stacktrace поможет нам).

Это означает, что вам также необходимо разместить @Ignore во всех подклассах.

В качестве альтернативы, чтобы избавить вас от этого, вы могли бы использовать @IfProfileValue (который унаследован) в базовом классе, чтобы отключить тесты. Это аннотация для Spring, поддерживаемая SpringJUnit4ClassRunner.

+0

Просто добавление @Ignore к классам в середине иерархии выполняло работу. Спасибо Джонатан. – amit

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