By-Delegation является нулем ShadowView - PullRequest
0 голосов
/ 02 января 2019

Модульный тест не пройден по исключению в рамках делегирования класса.

Я использую все новые версии AndroidX, Robolectric, Dagger 2, Android Architecture Components, RxJava.Я хотел бы создать тест в Robolectric моей деятельности, который содержит пользовательский вид с делегированием.Кроме того, мне нужно создать ShadowView моего собственного.

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

Структура выглядитthis:

interface Delegation {
    fun onSmth()
}

class DelegationImpl(): Delegation {
    override fun onSmth() {
        println("Hello#_#World")
    }
}

class Foo : Delegation by DelegationImpl()

@Implements(Foo::class)
class ShadowFoo : ShadowViewGroup() {

    @Implementation
    override fun __constructor__(context: Context, attrs: AttributeSet, styleRes: Int) = Unit

}

Как реализовать делегирование классов для этой ситуации?Возможно, конструктор не вызывается, а делегирование тоже не вызывается, но я не хочу здесь вызывать конструктор, так что такое решение?

ОБНОВЛЕНИЕ

Здесьis stacktrace:

java.lang.NullPointerException
at com.example.app.MapView.addOnGpsPointSelectedListener(MapView.kt)
at com.example.app.MapActivity.onCreate(MapActivity.kt:39)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674)
at org.robolectric.android.controller.ActivityController.lambda$create$0(ActivityController.java:69)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:365)
at org.robolectric.android.controller.ActivityController.create(ActivityController.java:69)
at org.robolectric.android.controller.ActivityController.create(ActivityController.java:74)
at org.robolectric.android.controller.ActivityController.setup(ActivityController.java:210)
at org.robolectric.Robolectric.setupActivity(Robolectric.java:76)...

MapView реализует интерфейс с делегированием так же, как описано выше.

...