Spring 3+ Как создать TestSuite, когда JUnit его не распознает - PullRequest
6 голосов
/ 11 сентября 2010

Я использую Spring 3.0.4 и JUnit 4.5. Мои тестовые классы в настоящее время используют поддержку тестов аннотаций Spring со следующим синтаксисом:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration (locations = { "classpath:configTest.xml" })
@TransactionConfiguration (transactionManager = "txManager", defaultRollback = true)
@Transactional
public class MyAppTest extends TestCase 

{
 @Autowired
 @Qualifier("myAppDAO")
 private IAppDao appDAO;
    ...
}

Мне не нужна строка , расширяющая TestCase для запуска этого теста. Он не нужен при запуске этого тестового класса сам по себе. Мне пришлось добавить extends TestCase , чтобы я мог добавить его в классе TestSuite:

public static Test suite() {
        TestSuite suite = new TestSuite("Test for app.dao");
  //$JUnit-BEGIN$
  suite.addTestSuite(MyAppTest.class);
        ...

Если я опущу расширение TestCase , мой комплект тестов не будет запущен. Eclipse пометит suite.addTestSuite (MyAppTest.class) как ошибку.

Как добавить тестовый класс Spring 3+ в Test Suite? Я уверен, что есть лучший способ. Я проголодался и прочитал документы. Если вы мне не верите, я хочу выслать вам все свои закладки в качестве доказательства. Но в любом случае я бы предпочел конструктивный ответ. Большое спасибо.

1 Ответ

6 голосов
/ 11 сентября 2010

Вы правы; Тесты в стиле JUnit4 не должны расширяться junit.framework.TestCase

Вы можете включить тест JUnit4 как часть набора JUnit3 следующим образом:

public static Test suite() {
   return new JUnit4TestAdapter(MyAppTest.class);
}

Обычно вы добавляете этот метод в класс MyAppTest. Затем вы можете добавить этот тест в свой большой набор:

 public class AllTests {
   public static Test suite() {
     TestSuite suite = new TestSuite("AllTests");
     suite.addTest(MyAppTest.suite());
     ...
     return suite;
   }
}

Вы можете создать набор в стиле JUnit4, создав класс с аннотацией Suite

@RunWith(Suite.class)
@SuiteClasses( { AccountTest.class, MyAppTest.class })
public class SpringTests {}

Обратите внимание, что AccountTest может быть тестом в стиле JUnit4 или тестом в стиле JUnit3.

...