Tag: robolectric

kotlin和ArgumentCaptor – IllegalStateException

我有一个通过ArgumentCaptor捕获类参数的问题。 我的测试类看起来像这样: @RunWith(RobolectricGradleTestRunner::class) @Config(sdk = intArrayOf(21), constants = BuildConfig::class) class MyViewModelTest { @Mock lateinit var activityHandlerMock: IActivityHandler; @Captor lateinit var classCaptor: ArgumentCaptor<Class> @Captor lateinit var booleanCaptor: ArgumentCaptor private var objectUnderTest: MyViewModel? = null @Before fun setUp() { initMocks(this) … objectUnderTest = MyViewModel(…) } @Test fun thatNavigatesToAddListScreenOnAddClicked(){ //given //when objectUnderTest?.addNewList() //then verify(activityHandlerMock).navigateTo(classCaptor.capture(), booleanCaptor.capture()) var clazz = […]

使用Realm + PowerMockito无法在Android Studio中运行Robolectric测试

我使用Realm,PowerMockito和Robolectric为我的应用程序编写测试。 如果使用./gradlew test ,测试运行正常,但是如果使用Android Studio中的配置运行。 它会显示如下错误。 com.thoughtworks.xstream.converters.ConversionException: Cannot construct org.powermock.modules.junit4.rule.PowerMockStatement$1 as it does not have a no-args constructor : Cannot construct org.powermock.modules.junit4.rule.PowerMockStatement$1 as it does not have a no-args constructor 有没有人有这个问题的解决方案? 这是我在Kotlin写的测试。 @RunWith(RobolectricGradleTestRunner::class) @Config(application = TestApplication::class, constants = BuildConfig::class, sdk = intArrayOf(21)) @PowerMockIgnore(“org.mockito.*”, “org.robolectric.*”, “android.*”) @SuppressStaticInitializationFor(“io.realm.internal.Util”) @PrepareForTest(RealmCore::class, RealmLog::class, Realm::class, RealmResults::class, RealmQuery::class) class RealmMiddlewareTest { data […]

lateinit属性主持人还没有被EasyMVP,Robolectric和Kotlin初始化

尝试使用Robolectric测试正在使用EasyMvp的活动时遇到问题。 所有的课程都是用Kotlin写的。 这是一个活动的开始: @ActivityView(layout = R.layout.activity_access, presenter = AccessPresenterImpl::class) class AccessActivity : BaseActivity(), AccessView { @Presenter lateinit var presenter: AccessPresenter override fun providePresenter(): BasePresenter? { return presenter } 在onStart上,每个活动都在演示者中初始化临时演员。 我试图在我的应用程序中介绍Robolectric测试。 var activity: AccessActivity? = null var loginEditText: EditText? = null var passwordEditText: EditText? = null @Before fun initData() { activity = Robolectric.setupActivity(AccessActivity::class.java) loginEditText = activity?.findViewById(R.id.loginEditText) […]

Robolectric KeyStoreKeyGenerator

我正在使用我的项目Dagger2,KeyStoreKeyGenerator(来自in.co.ophio.secure),我想用Robolectric来测试我的片段。 我将主持人注入我的片段。 Presenter已注入userPrefs。 UserPrefs已经实现了KeyStoreKeyGenerator class UserPreferences(val application: App) : UserPreferencesAPI { // another methods and fields private val keyGenerator = KeyStoreKeyGenerator.get(application, application.packageName) } 这是我的主持人 class MainPresenter(…, val sharedPreference: UserPreferencesAPI) 这是我的考验 private MainFragment fragment; private MainActivity activity; @Before public void setUp() { activity = Robolectric.buildActivity(MainActivity.class).create().start().resume().get(); fragment = MainFragment.Companion.newInstance(); } @Test public void shouldBeNotNull() { Assertions.assertThat(activity).isNotNull(); } […]

与Robolectric的Mockito:“创建代理时发生ClassCastException”

在Robolectric中使用它时,我开始在Mockito中碰到一个奇怪的ClassCastException。 当我运行相同的测试不使用Robolectric转轮,一切顺利,没有例外抛出。 这里是堆栈跟踪: org.mockito.exceptions.base.MockitoException: ClassCastException occurred when creating the proxy. You might experience classloading issues, disabling the Objenesis cache *might* help (see MockitoConfiguration) at com.compassrosetech.ccs.android.test.ObservableCacheDispatcherTest.setUp(ObservableCacheDispatcherTest.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:236) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at […]

Robolectric与AppCompat Library不兼容的AlertDialog问题

我的应用程序有Robolectric框架测试的Android Alertdialog。 ShadowAlertDialog.getLatestAlertDialog() 但是,现在该AlertDialog更改为android.support.v7.app.AlertDialog,因为Robolectric给我一个不兼容的类型错误。 Error:(81, 50) error: incompatible types required: android.support.v7.app.AlertDialog found: android.app.AlertDialog 我该如何解决这个问题?

Android单元测试将不会使用正确的应用程序类

我正在遇到一些奇怪的行为,就像android在单元测试中选择Application类一样。 我在目录src/testDevelopmentDebug有Robolectric单元测试 我也有一些测试代码分别在src/testDevelopmentDebug和androidTestDevelopment进行单元测试和espresso测试。 共享代码是在src/sharedTest ,我有这样的设置在我的build.gradle文件中: sourceSets { // Android Studio / the Android Studio Kotlin Plugin will stop recognizing these source folders as source // folders without explicitly setting them main.java.srcDirs += 'src/main/kotlin' testDevelopmentDebug.java.srcDirs += 'src/testDevelopmentDebug/kotlin' androidTestDevelopment.java.srcDirs += 'src/androidTestDevelopment/kotlin' // Share code between UI and unit tests. def sharedTestDir = 'src/sharedTest/kotlin' androidTestDevelopment.java.srcDirs += sharedTestDir testDevelopmentDebug.java.srcDirs […]

Robolectric测试和LiveData

为了得到Kotlin,LiveData和Robolectric的一切,我得到了一个简单的启动画面的活动。 它在运行应用程序时正常工作,但在测试中无法正常工作。 这就像现场数据的回调从未触发或如果没有注册它的话。 这是测试: @Test fun should_redirect_to_login_when_time_is_up_after_onStart() { val timeUp = MutableLiveData<Boolean>() kodein.addConfig { bind<SplashViewModel>(overrides = true) with factory { _: BaseActivity -> mock<SplashViewModel> { on { isTimeUp() } doReturn timeUp } } } val activity = Robolectric.buildActivity(SplashActivity::class.java).create().start().resume().get() timeUp.value = true val startedIntent = shadowOf(activity).nextStartedActivity assertThat(startedIntent).isNotNull assertThat(startedIntent).hasComponent(application.packageName, LoginActivity::class.java) } 活动: class SplashActivity : JapetActivity() { […]

Robolectric测试在启动时挂起 – 从sonatype转移

我在项目中配置Robolectric时遇到问题。 如果有关系,我也使用Kotlin。 这是我的build.gradle apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 testOptions { unitTests { includeAndroidResources = true } } sourceSets { test.java.srcDirs += ['build/generated/source/apt/test/debug'] } defaultConfig { minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } […]

测试Android Kotlin应用程序 – 用匕首Mockito注入null

我正在学习使用Mockito和Robolectric在Android上进行测试。 我用RxJava和Dagger2在Kotlin中使用Clean Architecture创建了一个非常简单的应用程序。 一切正常,但我不能让我的测试通过。 这是我的LoginPresenterTest: @RunWith(RobolectricGradleTestRunner::class) @Config(constants = BuildConfig::class) public class LoginPresenterTest { private lateinit var loginPresenter: LoginPresenter @Rule @JvmField public val mockitoRule: MockitoRule = MockitoJUnit.rule() @Mock private lateinit var mockContext: Context @Mock private lateinit var mockLoginUseCase: LoginUseCase @Mock private lateinit var mockLoginView: LoginView @Mock private lateinit var mockCredentialsUseCase: GetCredentials @Before public fun setUp() { […]