使用规格与单位
问题描述:
我正在试图获得scala规格和unitils-dbunit的工作。使用规格与单位
使用已unitils来注释 测试类@RunWith(classOf [UnitilsJUnit4TestClassRunner])或 从类扩展,你可以设定数据集与 @DataSet(阵列(“DataSet.xml”)来加载)。所有这些都适用于JUnit。
- 我正在我的规格与gradle产出和ScalaTestAntTask测试,所以 我猜@RunWith注释将被忽略:
但使用的规格时,我得到了2个问题。
-
我不能@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] } } }
这给了我以下编译器错误:
错误:定义
的预期开始“查询数据库”应为{
^
有人知道我怎么可以一起使用规格和单位?
UPDATE:这是我想出了解决方案:
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))
}
}
}
- 基督教
答
该数据集注释不能直接应用到"xxx" should
,因为这不是一个测试方法,只是一个普通的Scala代码调用。
我不能给你一个完全可行的解决方案,但你需要做的是挖掘单元API并使用DataSetFactory直接加载你的数据。我认为你可以或多或少地重用发现的代码here。
然后,如果您需要在每个示例之前加载此数据集,只需使用doBefore调用即可。
感谢您的回答,它的工作(我将解决方案附加到我的问题) – Christian 2011-03-21 15:45:32