【发布时间】:2026-01-22 05:30:02
【问题描述】:
我有一个特性,它添加了几个测试和之前的块。具体实例的 @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 总是会成功,因为执行顺序是:
addPersonatruncatetestRejectsInsertWhenAlreadyInTable
在不对子类施加太多约束的情况下,对 @Before 块进行排序的正确方法是什么?我总是可以在 trait 中声明 truncate,然后在子类中有一个 @Before 方法,但是我必须记住让我的所有子类都调用该 truncate 方法。
在 Scala 2.9.0.1 上使用 JUnit 4.10。
【问题讨论】: