2011-03-18 50 views
3

我正在試圖獲得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)) 
      } 
     } 
    } 

- 基督教

回答

3

該數據集註釋不能直接應用到"xxx" should,因爲這不是一個測試方法,只是一個普通的Scala代碼調用。

我不能給你一個完全可行的解決方案,但你需要做的是挖掘單元API並使用DataSetFactory直接加載你的數據。我認爲你可以或多或少地重用發現的代碼here

然後,如果您需要在每個示例之前加載此數據集,只需使用doBefore調用即可。

+0

感謝您的回答,它的工作(我將解決方案附加到我的問題) – Christian 2011-03-21 15:45:32