Tag: android testing

androidTest uiautomator库中的突然未解决的参考

在使用uiautomator库编写测试测试时,一切都运行良好,直到不知何故uiautomator库相关的导入都不起作用。 我有一个稳定版本的测试工作在一个分支,甚至切换到该分支仍然没有任何工作。 而在稳定的分支(以防万一)我多次尝试以下事情和组合: 与Gradle文件同步项目 清洁/重建 无效并重新启动 重启机器 git clean -fdx ,然后3。 下载了最新的稳定AS 3.0.1,再次克隆项目,没有导入任何设置,然后是1,2,3。 从gradle中删除测试相关的库,然后1,2,3,然后再添加它们,然后是1,2,3。 作为一个简单的说明:我在Kotlin编写测试,但是这不应该使它有所不同,因为它之前工作正常,并且import参考确定。 虽然从android.support.test.uiautomator导入的任何类都没有解决,测试运行良好,他们使用uiatomator的function按预期工作。 我看不出为什么会这么不负责任。 (我已经花了超过10个小时)。 有谁知道正确的方法来解决引用?

即使在androidTest包中,Kotlin类也会作为junit测试运行 – 对于Java类,它运行正常

我遇到了非常奇怪的错误。 当我尝试运行测试,在我的Kotlin类的androidTest包,他们正在运行测试junit mehthods,并出现此错误: 处理完成退出代码1未find类:“com.someampp.shoppinglistapp.SomeClassTest”空测试套件。 你可以自己尝试。 我正在使用Android Studio 3.0.1 当我在Java中创建这样的类时: @RunWith(AndroidJUnit4.class) public class SomeTestClass{ @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals(“com.myapp.shoppinglistapp”, appContext.getPackageName()); } } 一切工作正常。 但是,当我将Java文件转换为Kotlin: @RunWith(AndroidJUnit4::class) class SomeTestClass{ @Test @Throws(Exception::class) fun useAppContext() { // Context of the app under test. val appContext = […]

Android Kotlin仪器测试不被识别为仪器测试

我正在尝试在我的Android项目中编写一个kotlin工具测试。 这一刻是非常基本的: class SimpleTest { @Test fun aTest() { Assert.assertTrue(true) } } 当我运行它时,它说no tests were found 。 但是当我运行这个类的Java版本时,系统会提示选择我要运行测试的设备(意思是AS将其识别为仪器测试)。 Java版本看起来像这样: public class AnyTest { @Test void aTest() { Assert.assertTrue(true); } } 如果我然后将这个Java类转换为Kotlin并重新运行测试,我得到相同的no tests were found 。 我在这里错过了什么? 谢谢

从kotlin代码中移除getter和setter

对于这个代码 class Foo { var name: String? = null } kotlin编译器生成: private String name; public final String getName() { … } public final void setName(String name) { … } 即使属性name没有自定义getter或setter。 可以使用@JvmField注释去除多余的get和set方法。 所以这个代码 class Foo { @JvmField var name: String? = null } 只生成一个字段,而无需其他方法。 public String name; 但有什么办法让kotlin编译器不能为整个项目中的所有属性生成getter和setter? 不管有没有注释。 也许一些实验编译器标志? 我想要它,因为我已经在kotlin上编写了android instrumentation测试。 测试apk超过65k的方法计数限制。 大约有2k个方法被生成getter / setter。 […]

Kotlin androidTest:测试运行完成。 空的测试套件

我正试图将我的测试从java转换为kotlin。 简单的unit testing翻译成功,如下所示: class BindingUtilsTest { @Test @Throws(Exception::class) fun testConvertBooleanToVisibility_visible() { assertEquals(BindingUtils.convertBooleanToVisibility(true), View.VISIBLE) } } 但是,当我试图运行androidTest失败,消息:“没有测试被发现”和 测试运行开始 测试运行完成。 空的测试套件。 代码工作完美,当在Java中。 相关代码: build.gradle部分: apply plugin: “com.android.application” apply plugin: “com.neenbedankt.android-apt” // for tests apply plugin: ‘kotlin-android’ // defaultConfig testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” sourceSets { test.java.srcDirs += ‘src/test/kotlin’ // tests are there androidTest.java.srcDirs += ‘src/androidTest/kotlin’ // and there } // […]

运行测试时如何禁用Fabric

运行测试时,如何禁用Fabric:Crashlytics和Answer? 有没有其他的方式来在测试期间禁用Crashlytics,而不是在每次测试之前放置这些代码? @LargeTest @RunWith(AndroidJUnit4::class) class AcceptanceTest { @Before fun setUp() { val crashlyticsKit = Crashlytics.Builder() .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()) .build() Fabric.with(InstrumentationRegistry.getContext(), crashlyticsKit) } } 并避免把像IS_TEST_MODE一样的全局布尔值

如何在测试时注入不同的客户端进行改造?

有什么方法可以改变用Dagger将具有不同客户端的Retrofit模块注入到仪器测试的RestAdapter上的方法吗? @Provides @Singleton public APIService getAPIService() { RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(BuildConfig.HOST) .build(); return restAdapter.create(APIService.class); } 但是,我想在执行仪器测试时设置一个新的客户端。 @Provides @Singleton public APIService getAPIService() { RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(BuildConfig.HOST) .setClient(new MockClient()) .build(); return restAdapter.create(APIService.class); } 有没有办法做到这一点? 谢谢

如何获得不同的单元和instrumentationTests为Android的顶级功能的实现

我有一个顶级功能的kotlin文件(不是任何类的成员)。 它编译为Java中的静态函数类。 我想为单元测试(独立于平台)和仪器测试(生产行为+ Espresso Idling Resource)提供不同的函数实现。 我可以把同一个文件放在prod和测试的相同路径中,但是当我把它放到测试中,androidTest – IDE在一个源文件集中看到它,并且无法解析我想要使用的函数。 由于我使用的是顶级函数,因此我不能使用DI将不同的实现传递给测试类。 是否有任何不同的测试和androidTest顶级功能的类的实现? 我试过了 sourceSets { androidTest { java.srcDirs = ['src/androidTest/java'] java.exclude('src/test/java/util/CoroutinesUi.kt') } test { java.srcDirs = ['src/test/java'] } } 没有运气。

我必须重新启动IDE才能运行测试

当在IDE中直接运行单个测试时,Android Studio 2.2出现奇怪的错误 – 我要么“没有找到测试”,要么运行我之前编译的测试。 例: @Test fun testyTest() { } 我将创建这个测试,并得到“没有找到测试”。 所以我重新启动,并测试被发现! 显然,上面的测试通过了,因为它是空的。 接下来,我想让我的测试失败。 所以我手动抛出一个异常,并在下面添加一行代码。 @Test fun testyTest() { throw RuntimeException() } 现在我重新编译,而且这个测试也通过了,因为IntelliJ由于某种原因已经缓存了以前的测试并重新执行了。 为了使这个测试正常失败 – 我必须重新启动IDE。 任何人都知道发生了什么事? 注意 – 我在这个项目中使用了Kotlin。 编辑2:这是一个Android 库项目中的JVM测试(非android, src/test/java )。 编辑:这是一个完整的测试类 package com.example.zak import org.junit.Before import org.junit.Test class ExampleTest { @Before fun setUp() { } @Test fun testyTest() { //throw […]

sharedpreferences上的nullPointerException helper类运行测试时

我开始在一个小演示android应用程序上使用kotlin。 我创建了一个sharedpreferences帮助类,我试图用junit和mockito来测试。 下面是我的sharedprefshelper public class SharedPrefsHelperImp( cont : Context) : SharedPrefsHelper { val prefsname: String = "prefs" var prefs: SharedPreferences? = null var edit: SharedPreferences.Editor? = null init { prefs = cont.getSharedPreferences(prefsname, Context.MODE_PRIVATE) edit = prefs!!.edit() } override fun getPrefsStringValue(key: String) : String { return prefs!!.getString(key, "") } override fun addPrefsStringVal( key : String, value: […]