Тестирование с помощью 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?

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") { ... } }) 
Intereting Posts
Приложение не реализует dagger.android.HasDispatchingActivityInjector В языке программирования Kotlin значение varargs с точки зрения использования Как определить длинный тип данных в котлин? Как исправить потерянное время на дату после преобразования? Kotlin NumberFormatException Невозможно использовать string.contains () в выражении kotlin `when` Кнопка фрагмента onClickListener не выполняется В Kotlin Как я могу преобразовать Int? к Int У Kotlin Android Extensions кешируются синтетические свойства или каждый раз, когда он вызывает findViewById ()? Требуется ли знание Groovy для понимания Gradle? Spring Security несколько успешных поставщиков аутентификации Google Guava Invokedynamic требует –min-sdk-version> = 26 Как создать асинхронный вызов с помощью дооснащения и наблюдения в Котлине? Каков тип setContentView () Нельзя ли градировать проект построения, когда я добавляю класс ChatInformation kotlin, который расширяет RealmObject до моего проекта, где ошибка?