我正在努力让scala规范和unitils-dbunit工作。
要使用单位,你必须注释你的 使用@RunWith测试类(classOf [UnitilsJUnit4TestClassRunner])或 从类扩展,您可以设置要加载的DataSet @DataSet(阵列( “DataSet.xml”))。所有这些都适用于JUnit。
但是在使用规格时我遇到了两个问题:
我无法将@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))
}
}
}
- 基督教
答案 0 :(得分:3)
DataSet注释无法直接应用于"xxx" should
,因为这不是测试方法,只是常规的scala代码调用。
我无法为您提供完全有效的解决方案,但您需要做的是挖掘出unitils API并直接使用DataSetFactory来加载您的数据。我认为您可以或多或少地重复使用here找到的代码。
然后,如果您需要在每个示例之前加载此数据集,只需使用doBefore调用。