在我的robolectric测试中,我正在尝试读取文件.由于此文件仅包含测试数据,因此我将其放入测试的资产中.
目录结构如下所示.
src/main/assets/prod_data_file
src/test/assets/test_data_file
但是,当我尝试通过getShadowApplication().getAssets().open(MY_FILE_PATH)它读取文件给我FileNotFoundException.
有人知道如何解决这个问题吗?
使用Jacoco插件在android studio中测试用例失败时未生成代码覆盖率报告.如何跳过失败的测试用例并生成代码覆盖率报告.
我跑了./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目录并在那里移动该清单 - 在连接测试期间正确应用权限(但在常规调试版本中也是如此,这是不可取的).
我做错了什么或有错误吗?
我想征求一些关于什么是理想工具的意见.我希望尽可能少地使用并尽可能紧密地集成.(我已经阅读了大约20个不同的主题,并且在工作中也有一些经验)
对于其中任何一种,我都赞成集成解决方案(例如,如果一个功能作为Android Studio的本机功能,我宁愿使用它)
1)测试
2)测试覆盖率 - EMMA ??? 我认为TeamCity也是如此.还要别的吗?
3)VCS - Git/Github
4)问题检测+跟踪
我应该使用Github中的集成问题跟踪,还是尝试JIRA?Crashlytics似乎与两者融为一体,或社区有不同的首选工具?
5)CI
6)与您的用户沟通 - 一个集成的解决方案,可以更新Facebook,Twitter,谷歌+和潜在的基于论坛的社区网站.那个空间里有什么漂亮的解决方案吗?
非常感谢.
google-app-engine continuous-integration android-testing google-cloud-endpoints gradle-android-test-plugi
我浪费了两天时间尝试在全屏活动上执行点击操作.
为活动写一个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)
}
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)尝试使用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)
是否有一种优雅的,甚至是推荐的方式来做到这一点,还是我不能在那里进行某种定时等待?
我想单元测试一个UtilsClass类型的静态方法,它返回一个Pair<String[], String[]>.在这个方法中,我将一对String []注入其构造函数中,例如.final Pair<String[], String[]> pair = new Pair<>(new String[] {"Hello", "World"}, new String[] {"£33", "£44"});并期望返回此对象.
当我对这个方法进行单元测试时,我得到一个非空的Pair对象,但是它的字段first = null和second = null.当我在Instrumentation类型测试中运行相同的测试代码时,将正确填充字段.我可以看到,在后一种情况下,public Pair(F first, S second) {输入调试点的构造函数和字段设置,但不在单元测试中.
我正在寻找解释为什么会这样,如果我应该避免String[]首先在代码中传递as构造函数params.
根据这个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配给量?
我正在使用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
我使用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
android-testing ×10
android ×8
android-architecture-components ×1
generics ×1
gradle ×1
jacoco ×1
java ×1
junit ×1
robolectric ×1