我正在尝试让 scala 规范和 unitils-dbunit 工作。
要使用 unitils,您必须使用 @RunWith(classOf[UnitilsJUnit4TestClassRunner]) 注释您的测试类或从类扩展,您可以设置 DataSet 以使用 @DataSet(Array("DataSet.xml")) 加载。所有这些都适用于 JUnit。
但是我在使用规范时遇到了两个问题:
- 我正在使用 gradle 和 ScalaTestAntTask 运行我的规范测试,所以我猜 @RunWith 注释将被忽略。
我无法将 @DataSet 注释设置为我的测试方法,如下所示:
[...] @RunWith(classOf[UnitilsJUnit4TestClassRunner]) class DaoTest extends Specification with ScalaTest { @TestDataSource var dataSource: DataSource = null @DataSet(Array("DataSet.xml")) "querying the database" should { "return the right data" in { [assertSomething] } } }
这给了我以下编译器错误:
错误:预期的定义开始
“查询数据库”应该{
^
有人知道我如何一起使用规格和单位吗?
更新:这是我想出的解决方案:
import org.specs.runner.ScalaTest
import org.specs.Specification
import org.unitils.dbunit.DbUnitModule
import java.io.File
import java.util.Properties
import org.unitils.core.ConfigurationLoader
class DaoTest extends Specification with ScalaTest {
"querying the database" should {
doBefore {
UnitilsDatabaseUtils.setup("DataSet.xml", "DataSet2.xml")
}
"return the right data" in {
[test something]
}
}
}
object UnitilsDatabaseUtils {
def setup(dataSetFileNames: String*) = {
val configuration: Properties = new ConfigurationLoader().loadConfiguration
val dbunitModule = new DbUnitModule
dbunitModule.init(configuration)
for (dataSetFileName <- dataSetFileNames) {
val dataSetURL = getClass.getClassLoader.getResource(dataSetFileName)
dbunitModule.insertDataSet(new File(dataSetURL.toURI))
}
}
}
——克里斯蒂安