私はscalaの仕様とunitils-dbunitを機能させようとしています。
ユニティルを使用するには、テストクラスに@RunWith(classOf [UnitilsJUnit4TestClassRunner])でアノテーションを付けるか、クラスから拡張する必要があり、@ DataSet(Array( "DataSet.xml"))でロードするようにDataSetを設定できます。これはすべてJUnitで機能します。
しかし、スペックを使用すると2つの問題が発生しました。
- 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))
}
}
}
- キリスト教徒