Как игнорировать классы, связанные с Android.inject (this) при использовании Power mock - PullRequest
0 голосов
/ 21 февраля 2019

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

Совместное использование SampleActivity и его класса Test.

SampleActivity:

class SampleActivity : BaseActivity() {

@Inject
lateinit var router: RoutingContracts.Router

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    AndroidInjection.inject(this)

    val intent = Intent(this, MainActivity::class.java)
    startActivity(intent)
    finish()
}
 <----------------Rest of the code------------>

}

Совместное использование моего тестакласс:

@Config(constants = BuildConfig::class, sdk = [24], application = TestApplication::class)
@RunWith(RobolectricTestRunner::class)
@PowerMockIgnore("org.mockito.*", "org.robolectric.*", "android.*"
    ,"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"
    , "com.sun.org.apache.xalan.*")
@PrepareForTest(MyFeatureLibrary::class)
class SampleActivityTest {

@get:Rule
public val rule = PowerMockRule()

@Test
fun shouldStartMainActivity() {

    PowerMockito.spy<MyFeatureLibrary>(MyFeatureLibrary::class.java)
    PowerMockito.doNothing().`when`<MyFeatureLibrary>(MyFeatureLibrary::class.java
            , "initLibrary", Mockito.any(Activity::class.java)
            , Mockito.anyBoolean() )

    val sampleActivity = Robolectric.buildActivity(SampleActivity::class.java).create().get()
    val expectedIntent = Intent(sampleActivity, MainActivity::class.java)

    assertTrue(shadowOf(sampleActivity).nextStartedActivity.filterEquals(expectedIntent))
}
}

Тестовый класс изначально не имеет кода, связанного с имитацией мощности.Тогда тесты работают как положено.

Теперь я должен сделать статический вызов метода в базовой деятельности.Итак, я пытаюсь включить макет initLibrary статический вызов метода в BaseActivity.

Я получаю много ошибок сейчас.После поиска в Google я поставил много пакетов игнорирования Powermock.Но это не решает ошибки полностью.

Я хочу, чтобы power mock полностью игнорировал классы, связанные с инъекцией Android (Android.Inject (this)).Кто-нибудь сталкивался с этой проблемой?

Последнее сообщение об ошибке:

java.lang.RuntimeException: com.sample.myapp.TestApplication does not implement dagger.android.HasActivityInjector
...