Przed wiedział o „@RunWith (Enclosed.class)” podejście, to stosuje się następujące rozwiązania (podobnie), rozciągających się z wewnętrznymi klas klasy zewnętrzną. Nadal używam tej struktury, ponieważ podoba mi się, że testy są w tym samym miejscu i mają pewne właściwości i metody, a rzeczy wydają mi się bardziej przejrzyste. Następnie za pomocą środowiska Eclipse wybieram opcję "Uruchom wszystkie testy w wybranym projekcie, folderze lub folderze źródłowym", a wszystkie te testy zostaną wykonane za pomocą jednego kliknięcia.
public class TestBooksDAO {
private static BooksDAO dao;
@Parameter(0)
public String title;
@Parameter(1)
public String author;
@Before
public void init() {
dao = BooksDAO.getInstancia();
}
/** Tests that run only once. */
public static class SingleTests extends TestBooksDAO {
@Test(timeout=10000)
public void testGetAll() {
List<Book> books = dao.getBooks();
assertNotNull(books);
assertTrue(books.size()>0);
}
@Test(timeout=10000)
public void testGetNone() {
List<Book> books = dao.getBooks(null);
assertNull(books);
}
}
/** Tests that run for each set of parameters. */
@RunWith(Parameterized.class)
public static class ParameterizedTests1 extends TestBooksDAO {
@Parameters(name = "{index}: author=\"{2}\"; title=\"{0}\";")
public static Collection<Object[]> values() {
return Arrays.asList(new Object[][] {
{"title1", ""},
{"title2", ""},
{"title3", ""},
{"title4", "author1"},
{"title5", "author2"},
});
}
@Test(timeout=10000)
public void testGetOneBook() {
Book book = dao.getBook(author, title);
assertNotNull(book);
}
}
/** Other parameters for different tests. */
@RunWith(Parameterized.class)
public static class ParameterizedTests2 extends TestBooksDAO {
@Parameters(name = "{index}: author=\"{2}\";")
public static Collection<Object[]> values() {
return Arrays.asList(new Object[][] {
{"", "author1"},
{"", "author2"},
{"", "author3"},
});
}
@Test(timeout=10000)
public void testGetBookList() {
List<Book> books = dao.getBookByAuthor(author);
assertNotNull(books);
assertTrue(books.size()>0);
}
}
}
Wygląda na to, że te testy nie powinny być w tym samym pakiecie co sparametryzowane testy. – Makoto
Tak, to jedyne rozwiązanie, które przyszło mi do głowy, ale bardzo lubię mieć "powiązane" testy w jednym pakiecie, np. wszystkie testy dla jednej klasy w jednej klasie testowej ... – centic