Articles of android testing

如何从testing范围中排除Dagger2类

有什么select可以从Android Studio中的testing覆盖率报告中排除Dagger2类

我怎样才能unit testing从活动发起/发送的意图?

如何创buildtesting活动内生成的Intent内容的Android JUnittesting用例? 我有一个包含EditText窗口的Activity,当用户完成input所需数据时,Activity将Intent发送到IntentService,IntentServicelogging数据并继续执行应用程序进程。 这里是我想testing的类,OnEditorActionListener / PasscodeEditorListener被创build为一个单独的类: public class PasscodeActivity extends BaseActivity { EditText m_textEntry = null; PasscodeEditorListener m_passcodeEditorListener = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.passcode_activity); m_passcodeEditorListener = new PasscodeEditorListener(); m_textEntry = (EditText) findViewById(R.id.passcode_activity_edit_text); m_textEntry.setTag(this); m_textEntry.setOnEditorActionListener(m_passcodeEditorListener); } @Override protected void onPause() { super.onPause(); /* * If we're covered for any reason during the […]

使用Espresso进行相机操作UItesting

我需要使用espressotesting项目自动执行我的UItesting以便进行以下操作。 操作: 点击打开我的手机相机的button。 捕获图像,并保存在SD卡存储的图像。 完成后还要在屏幕上更新小图像视图。 应用程序工作正常,但与所有其他操作和类似的上述操作,它成为一个耗时的过程,以手动testing一次又一次。

带有ActionBarActivity的ActivityUnitTestCase的NameNotFoundException

我正在尝试为现有的应用程序编写一些testing。 我想提供一个testing应用程序类的testing,我跟着这里的例子,因为我也使用Dagger的DI。 但是,如果被测活动是一个ActionBarActivity,我得到以下exception: java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{mypackage.view.activity/mypackage.view.activity.MyActivity} at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:282) at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:116) at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57) at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98) at mypackage.view.activity.MyActivity.onCreate(MyActivity.java:68) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:158) at mypackage.MyActivityTest.test(MyActivityTest.java:89) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) Caused by: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{mypackage.view.activity/mypackage.view.activity.MyActivity} at android.app.ApplicationPackageManager.getActivityInfo(ApplicationPackageManager.java:242) at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:298) at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:279) … 21 more 我的testing类如下所示: public class […]

在设备操作testing期间,“animation师只能在Looper线程上运行”

这是我的testing代码: @RunWith(AndroidJUnit4.class) @SmallTest public class WelcomeActivityTests extends BaseTest { ApplicationController applicationController; @Rule public ActivityTestRule<WelcomeActivity> activityTestRule = new ActivityTestRule<>(WelcomeActivity.class); ArgumentCaptor<Callback> argumentCaptor; @Before @Override public void setUp() { applicationController = (ApplicationController) InstrumentationRegistry.getTargetContext().getApplicationContext(); applicationController.setMockMode(true); argumentCaptor = ArgumentCaptor.forClass(Callback.class); super.setUp(); } @Test public void testLogin() throws InterruptedException { onView(withId(R.id.btnLogInW)).perform(click()); onView(withId(R.id.email)).perform(typeText("good.email@example.com")); onView(withId(R.id.passL)).perform(typeText("strong.password")); onView(withId(R.id.btnLogInL)).perform(click()); User user = new User(); user.first_name = "Fake […]

如何在testing过程中调用oncreate之前获取活动引用

如何在onCreate之前获得Activity的引用将被调用。 而它的testing。 我使用ActivityTestRule作为JUnit规则。 这个要求的原因是我想从testing中注入模拟活动。 public class MyActivity extends Activity{ MyComponent myComponent; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); if(myComponent==null){ myComponent … //initialise dagger component } myComponent.inject(this); … } public void setComponent(MyComponent comp){ this.myComponent = comp; } } public class MyTest{ @Rule public ActivityTestRule<MyActivity> intentsTestRule = new ActivityTestRule<>(MyActivity.class); MyComponent myFakeComponent; @Before public void setUp() { MyActivity activity […]

testing版本和程序版本的Android应用程序 – NoSuchMethodError

我正在尝试打开ProguardtestingAndroid应用程序的发布版本。 我为发布规则文件中包含的testing依赖项创build了额外的Proguard规则文件。 -keep class android.test.** { *; } -dontwarn android.test.** # Reuse the release ProGuard mapping -applymapping proguard.map -dontshrink -dontoptimize 一切都编译好,但在运行时失败。 java.lang.NoSuchMethodError: android.test.AndroidTestRunner.addTestListener at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.start(ProGuard:135) at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner$BridgeTestRunner.start(ProGuard:249) at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:389) at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(ProGuard:114) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4702) at android.app.ActivityThread.access$1600(ActivityThread.java:172) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5586) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) at dalvik.system.NativeStart.main(Native Method) […]

为androidTest定义buildConfigField

我在BuildConfig定义了一个特定的字段,用于在运行时获取URL 。 所以,对于每个构buildtypes,我使用不同的string: prod { buildConfigField "String", "BASE_URL", "\"abc.com\"" } debug { buildConfigField "String", "BASE_URL", "\"efg.com\"" } 运行androidtesting时可以定义一个不同的URL吗? 我试着把这个设置放在sourceSets->androidTest ,但是没有被接受。

unit testingAndroid和权限

我需要Android.permission.WRITE_SETTINGS为我的Android应用程序的junittesting。 我正在使用IntelliJ Idea 11.1.2和unit testing在他们自己的模块中,其中包含第二个AndroidManifest.xml进行testing。 我在testing模块的AndroidManifest.xml中添加了<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 。 错误: java.lang.SecurityException: Permission Denial: writing com.android.providers.settings.SettingsProvider uri content://settings/system from pid=1063, uid=10035 requires android.permission.WRITE_SETTINGS 丑陋的快速修复:我也将相同的权限添加到应用程序的AndroidManifest.xml。 testing运行没有一个单一的错误。 问题:我不想给整个应用程序权限来更改设置。 有没有办法只给testing权限?

Androidunit testing的正确方法

我知道这对所有的android开发者来说都是一个乏味的话题。 但是,Androidtesting的正确方法究竟是什么? 这是我可以想象的。 70%unit testing(JUnittesting所有的业务逻辑,networking层,数据库层等) 20%集成testing(也许是testing模拟服务器?主要testingAPI结果?) 10%的用户界面testing(嘲笑UI界面以外的任何其他内容,最有可能是Mockito + Espresso) 这是其他人正在遵循的还是另一种模式? 提前致谢!