Я пытаюсь заставить работать спецификации scala и 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))
}
}
}
- Кристиан