将规格与单元一起使用
我正在尝试让 scala 规范和 unitils-dbunit 正常工作。
要使用unitils,你必须注释你的 使用 @RunWith(classOf[UnitilsJUnit4TestClassRunner]) 测试类或 从类扩展,您可以设置要加载的数据集 @DataSet(数组(“DataSet.xml”))。所有这些都适用于 JUnit。
但是我在使用规范时遇到了两个问题:
- 我正在使用 gradle 和 ScalaTestAntTask 运行我的规范测试,所以 我猜@RunWith 注释将被忽略。
-
我无法将 @DataSet 注释设置为我的测试方法 在这里看到:
<前><代码>[...] @RunWith(classOf[UnitilsJUnit4TestClassRunner]) 类 DaoTest 使用 ScalaTest 扩展规范 { @测试数据源 var 数据源:数据源 = null @DataSet(Array("DataSet.xml")) “查询数据库”应该{ “返回正确的数据” in { [断言某事] } } }
这给了我以下编译器错误:
的预期开始
错误:定义“查询数据库”
应该{ ^
有人知道我如何一起使用规范和单元吗?
更新:这是我想出的解决方案:
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))
}
}
}
-- 基督教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DataSet 注解不能直接应用于
"xxx" should
因为这不是测试方法,只是常规的 scala 代码调用。我不能给你一个完整的工作解决方案,但你需要做的是挖掘unitils API并使用DataSetFactory 直接加载您的数据。我认为您或多或少可以重用找到的代码 此处。
然后,如果您需要在每个示例之前加载此数据集,只需使用 doBefore 调用。
The DataSet annotation can't be applied directly to
"xxx" should
because this is not a test method, just a regular scala code call.I can't give you a fully working solution but what you need to do is to dig out the unitils API and use the DataSetFactory directly to load your data. I think that you can more or less reuse the code found here.
Then, if you need to load this dataset before each example, just use a doBefore call.