使用规格与单位

使用规格与单位

问题描述:

我正在试图获得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调用即可。

+0

感谢您的回答,它的工作(我将解决方案附加到我的问题) – Christian 2011-03-21 15:45:32