Использование спецификаций с unitils

Я пытаюсь заставить работать 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))
            }
        }
    }

- христианин


person Christian    schedule 18.03.2011    source источник


Ответы (1)


Аннотацию DataSet нельзя применить непосредственно к "xxx" should, потому что это не тестовый метод, а обычный вызов кода Scala.

Я не могу дать вам полностью рабочее решение, но вам нужно откопать API unitils и использовать DataSetFactory непосредственно для загрузки данных. Я думаю, что вы можете более или менее повторно использовать найденный код здесь.

Затем, если вам нужно загружать этот набор данных перед каждым примером, просто используйте doBefore вызов.

person Eric    schedule 20.03.2011
comment
Спасибо за ответ, сработало (решение к своему вопросу я приложил) - person Christian; 21.03.2011