标签: android-testing

在robolectric测试中使用资产

在我的robolectric测试中,我正在尝试读取文件.由于此文件仅包含测试数据,因此我将其放入测试的资产中.

目录结构如下所示.
src/main/assets/prod_data_file
src/test/assets/test_data_file

但是,当我尝试通过getShadowApplication().getAssets().open(MY_FILE_PATH)它读取文件给我FileNotFoundException.

有人知道如何解决这个问题吗?

android robolectric android-testing

13
推荐指数
1
解决办法
6550
查看次数

失败测试用例后继续jacoco代码覆盖率报告

使用Jacoco插件在android studio中测试用例失败时未生成代码覆盖率报告.如何跳过失败的测试用例并生成代码覆盖率报告.

junit android jacoco android-testing android-studio

13
推荐指数
1
解决办法
1378
查看次数

使用gradle的Android仅测试权限

我跑了./gradlew connectedAndroidTest,我需要我的测试APK有一个权限,不应该在任何非测试APK(调试,发布).我已经创建了一个允许的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mypackage">
    <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/>
</manifest>
Run Code Online (Sandbox Code Playgroud)

然后我将此清单复制到src/androidTest目录,因为gradle android插件的发布说明提示:

0.13.0(2014/09/18)需要Gradle 2.1现在可以为测试应用程序提供清单(src/androidTest/AndroidManifest.xml)

但是,在我的连接测试期间不会应用权限.

如果我创建一个src/debug目录并在那里移动该清单 - 在连接测试期间正确应用权限(但在常规调试版本中也是如此,这是不可取的).

我做错了什么或有错误吗?

android gradle android-testing android-gradle-plugin

13
推荐指数
1
解决办法
3128
查看次数

测试,问题跟踪,持续集成 - 推荐GAE和Android应用程序的标准工具

我想征求一些关于什么是理想工具的意见.我希望尽可能少地使用并尽可能紧密地集成.(我已经阅读了大约20个不同的主题,并且在工作中也有一些经验)

对于其中任何一种,我都赞成集成解决方案(例如,如果一个功能作为Android Studio的本机功能,我宁愿使用它)

1)测试

  • GAE后端 - LocalServiceTestHelper测试,定期单元测试
  • App前端 - Roboelectric,Robotium,Monkey

2)测试覆盖率 - EMMA ??? 我认为TeamCity也是如此.还要别的吗?

3)VCS - Git/Github

4)问题检测+跟踪

  • GAE后端 - 开发控制台,日志记录
  • App frontent-- Crashlytics,debug也构建了local-log

我应该使用Github中的集成问题跟踪,还是尝试JIRA?Crashlytics似乎与两者融为一体,或社区有不同的首选工具?

5)CI

  • GAE后端 - 詹金斯?TeamCity的?也许开发中的一些谷歌解决方案?
  • App前端 - 詹金斯?TeamCity的?

6)与您的用户沟通 - 一个集成的解决方案,可以更新Facebook,Twitter,谷歌+和潜在的基于论坛的社区网站.那个空间里有什么漂亮的解决方案吗?

非常感谢.

google-app-engine continuous-integration android-testing google-cloud-endpoints gradle-android-test-plugi

13
推荐指数
1
解决办法
341
查看次数

Espresso - 在全屏活动上执行操作失败 - InjectEventSecurityException

我浪费了两天时间尝试在全屏活动上执行点击操作.

重现步骤

  1. 使用全屏活动代码模板在android studio中创建一个新项目
  2. 为活动写一个espresso测试以执行点击

    public class FullscreenActivityTest 
                  extends ActivityInstrumentationTestCase2<FullscreenActivity> {
    public FullscreenActivityTest() {
        super(FullscreenActivity.class);
    }
    
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        getActivity();
    }
    
    public void testClickingOnLayout() {
        onView(withId(R.id.fullscreen_content)).perform(click());
    }
    
    Run Code Online (Sandbox Code Playgroud)

    }

  3. 在模拟器上运行此测试(从姜面包到棒棒糖的任何Android版本).

失败

android.support.test.espresso.PerformException: 
Error performing 'click' on view 'with id: com.example.espressodefect:id/fullscreen_content'
...
Caused by: android.support.test.espresso.PerformException: 
Error performing 'Send down montion event' on view 'unknown'.
...
Caused by: android.support.test.espresso.InjectEventSecurityException: java.lang.SecurityException: 
Injecting to another application requires INJECT_EVENTS permission
Run Code Online (Sandbox Code Playgroud)

满堆栈在这里.

试着

我试过以下没有运气:

  • 模拟器上没有锁定屏幕.(还使用更新的活动WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
  • 所有动画都关闭了
  • 没有屏幕键盘,或任何覆盖在应用程序顶部的任何东西. …

android android-testing android-espresso

13
推荐指数
1
解决办法
3329
查看次数

等待使用浓缩咖啡查看寻呼机动画?

尝试使用ViewPager进行一些测试.

我想在标签之间滑动,我不想继续直到滑动完成.但似乎没有办法关闭视图寻呼机的动画(禁用开发人员选项下的所有动画).

因此,这总是会导致测试失败,因为视图寻呼机尚未完成动画,因此视图尚未完全显示:

// swipe left
onView(withId(R.id.viewpager)).check(matches(isDisplayed())).perform(swipeLeft());

// check to ensure that the next tab is completely visible.
onView(withId(R.id.next_tab)).check(matches(isCompletelyDisplayed()));
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的,甚至是推荐的方式来做到这一点,还是我不能在那里进行某种定时等待?

android-testing android-espresso

13
推荐指数
1
解决办法
4439
查看次数

android.util.Pair将String []作为androidTest中的参数保存,但在(单元)测试中为null

我想单元测试一个UtilsClass类型的静态方法,它返回一个Pair<String[], String[]>.在这个方法中,我将一对String []注入其构造函数中,例如.final Pair<String[], String[]> pair = new Pair<>(new String[] {"Hello", "World"}, new String[] {"£33", "£44"});并期望返回此对象.

当我对这个方法进行单元测试时,我得到一个非空的Pair对象,但是它的字段first = nullsecond = null.当我在Instrumentation类型测试中运行相同的测试代码时,将正确填充字段.我可以看到,在后一种情况下,public Pair(F first, S second) {输入调试点的构造函数和字段设置,但不在单元测试中.

我正在寻找解释为什么会这样,如果我应该避免String[]首先在代码中传递as构造函数params.

java generics android android-testing android-espresso

13
推荐指数
1
解决办法
1415
查看次数

如何测试Galaxy S8的android.max_aspect

根据这个https://android-developers.googleblog.com/2017/03/update-your-app-to-take-advantage-of.html

我需要设置max_aspect.模拟器仍然没有S8设备,所以我在硬件配置文件中设置了5.8",分辨率为2960 x 1440.我的应用程序看起来没问题,没有设置maz_aspect,它填充屏幕没有黑线,如谷歌文章所示.

我如何测试新的2.1配给量?

android android-emulator android-testing

13
推荐指数
1
解决办法
1104
查看次数

Android在每次测试开始时撤消权限

我正在使用Espresso和UIAutomator来编写我的测试用例.我正在测试外部存储权限,当它被拒绝时以及何时被允许.我有不同的测试用例,都需要在测试用例开始时撤销权限.但是,某些测试用例应该并且确实会导致授予权限,因此我需要在执行下一个测试时撤消权限.我一直在搜索,我遇到的最接近的事情是使用pm管理器执行adb shell命令来撤销权限.但是,通过这样做,我将收到以下错误,由于"进程崩溃",Instrumentation运行失败.有没有什么办法可以确保在每个测试用例开始时撤销权限?如果没有,如何解决有关测试权限的问题?提前谢谢你的帮助!

这是我目前在每个测试用例之前撤消权限的代码片段(不起作用):

@Before
public void setUp() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getInstrumentation().getUiAutomation().executeShellCommand(
                "pm revoke " + getTargetContext().getPackageName()
                        + " android.permission.WRITE_EXTERNAL_STORAGE");
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试使用上面的代码段撤消权限时出现相应的错误消息:

Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Process crashed.''.
Run Code Online (Sandbox Code Playgroud)

我也遇到过这两个帖子:这个这个.

android android-testing android-permissions android-espresso android-uiautomator

13
推荐指数
3
解决办法
3435
查看次数

测试LiveData转换?

我使用Android架构组件和反应式方法构建了一个启动画面.我从Preferences LiveData对象返回fun isFirstLaunchLD(): SharedPreferencesLiveData<Boolean>.我有ViewModel将LiveData传递给视图并更新首选项

val isFirstLaunch = Transformations.map(preferences.isFirstLaunchLD()) { isFirstLaunch ->
    if (isFirstLaunch) {
        preferences.isFirstLaunch = false
    }
    isFirstLaunch
}
Run Code Online (Sandbox Code Playgroud)

在我的片段中,我从ViewModel观察LiveData

    viewModel.isFirstLaunch.observe(this, Observer { isFirstLaunch ->
        if (isFirstLaunch) {
            animationView.playAnimation()
        } else {
            navigateNext()
        }
    })
Run Code Online (Sandbox Code Playgroud)

我想现在测试我的ViewModel,看看是否正确更新了isFirstLaunch.我该怎么测试呢?我是否正确分离了所有图层?你会对这个示例代码进行什么样的测试?

android android-testing android-livedata android-architecture-components android-jetpack

13
推荐指数
2
解决办法
711
查看次数