3

我正在尝试让 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))
            }
        }
    }

——克里斯蒂安

4

1 回答 1

3

DataSet 注释不能直接应用,"xxx" should因为这不是一个测试方法,只是一个常规的 scala 代码调用。

我不能给你一个完整的解决方案,但你需要做的是挖掘出 unitils API 并直接使用DataSetFactory来加载你的数据。我认为您可以或多或少地重用此处找到的代码。

然后,如果您需要在每个示例之前加载此数据集,只需使用doBefore调用。

于 2011-03-20T23:39:43.670 回答