Я пытаюсь заставить работать scala spec и unitils-dbunit.
Чтобы использовать unitils, вы должны аннотировать свой тестовый класс с помощью @RunWith (classOf [UnitilsJUnit4TestClassRunner]) или расширить класс, и вы можете настроить DataSet для загрузки с помощью @DataSet (Array ("DataSet.xml")). Все это работает с 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))
}
}
}
- христианин