Тестирование с помощью spek и совместное использование некоторых базовых тестовых примеров для базовых классов.

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

У меня есть абстрактный базовый класс и два производных класса.

abstract class Base {
    abstract fun send()
}
class Foo : Base() {
    override fun send() {}
    fun anotherFunction() { }
}
class Bar : Base() {
    override fun send() {}
    fun differentFunction() { }
}

Теперь мой вопрос: как я могу создать Speks для тех, кто классифицирован, но только определить тест для send() один раз в базовый спек?

Мой первый подход был использовать SubjectSpek

class BaseSpek : SubjectSpek<Base>({
    subject {
        // ??? Can't instantiate Base because it is abstract
    }

    it("test the base") { ... }
})
class FooSpek : SubjectSpek<Foo>({
    itBehavesLike(BaseSpek)

    it("test anotherFunction") { ... }
})

Мой второй подход заключался в использовании наследования:

abstract class BaseSpek(base: Base) : Spek({
    it("test the base") { ... }
})
abstract class FooSpek() : BaseSpek(???)

Кажется, ни один из моих подходов не работает. Любые предложения, как решить эту проблему? Должен ли я довести это до сведения Spek-Author для возможных изменений в будущих выпусках Spek?

1 ответ

Решение

SubjectSpek это правильный подход.

abstract class BaseSpec: SubjectSpek<Base>({
    it("test base") { ... }
})

object FooSpec: BaseSpec<Foo>({
    subject { ... }

    // ugly for now, until Spek supports @Ignore
    itBehavesLike(object: BaseSpec() {})

    it("test another") { ... }
})
Другие вопросы по тегам