Использование Specs с unitils - PullRequest
3 голосов
/ 18 марта 2011

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

- Кристиан

1 Ответ

3 голосов
/ 21 марта 2011

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

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

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

...