2011-03-18 5 views
3

scala 사양 및 unitils-dbunit을 사용하려고합니다. 사양 단위 사용하기

클래스에서 확장 @RunWith (classOf [UnitilsJUnit4TestClassRunner]) 또는 로 테스트 클래스에 주석을 당신이 unitils를 사용하면 데이터 집합의이 @DataSet (배열 ("DataSet.xml")와로드를 설정할 수 있습니다). 이 모든 작업은 JUnit에서 가능합니다. 그래서 나는 @RunWith 주석이 무시됩니다 같아요

  • 내가 Gradle을하고 ScalaTestAntTask 내 사양 테스트를 실행하고 있습니다 : 사양을 사용하는 경우

    는하지만이 문제를 얻었다.
  • 나는 여기에 본 로 내 시험 방법에 @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에 직접 적용 할 수 없습니다

답변

3

, 그냥 일반적인 스칼라 코드 호출.

완벽하게 작동하는 솔루션을 제공 할 수는 없지만 unitils API를 찾아서 DataSetFactory을 직접 사용하여 데이터를로드해야합니다. 나는 당신이 코드를 더 많이 또는 덜 재사용 할 수 있다고 생각한다. here.

각 예제 앞에이 데이터 세트를로드해야한다면 doBefore 호출을 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. (제 질문에 해결책을 첨부했습니다) – Christian