У меня есть трейт, добавляющий пару тестов и перед блоками. Блоки @Before конкретного экземпляра запускаются перед блоками в трейте. К сожалению, это означает, что я не могу обрезать таблицы базы данных, а затем вставлять фикстуры:
trait DatabaseTest {
@Before
def truncate() {
// "TRUNCATE %s".format(tableName)
}
def tableName
}
class PersonasTest extends DatabaseTest {
@Before
def addPersona() {
// "INSERT INTO %s VALUES (...)".format(tableName)
}
@Test
def testRejectsInsertWhenAlreadyInTable() {
// "INSERT INTO %s VALUES (...)".format(tableName)
}
def tableName = "personas"
}
testRejectsInsertWhenAlreadyInTable
всегда будет успешным, потому что порядок выполнения будет следующим:
addPersona
truncate
testRejectsInsertWhenAlreadyInTable
Как правильно упорядочить блоки @Before, не накладывая слишком много ограничений на подклассы? Я всегда мог бы объявить truncate
в трейте, а затем иметь метод @Before в подклассе, но тогда я должен помнить, что все мои подклассы должны вызывать этот метод усечения.
Использование JUnit 4.10 на Scala 2.9.0.1.