Тестирование с помощью 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") { ... }
})