我必须使用Automated UI测试工具,我对使用Robotium和Google Espresso感到困惑.
两者之间有哪些主要区别?是否存在一个但不存在的功能?
我在Android Studio中有以下文件夹结构:
??? androidTest
? ??? java
? ??? res
? ??? raw
? ??? test_file
??? main
??? java
??? res
??? raw
??? app_file
Run Code Online (Sandbox Code Playgroud)
我正在尝试访问test_file
androidTest元素的原始文件夹中存在的资源.这是继承自以下内容的Robotium测试用例中的代码ActivityInstrumentationTestCase2
:
InputStream is = this.getInstrumentation()
.getContext()
.getResources()
.openRawResource(R.raw.test_file);
Run Code Online (Sandbox Code Playgroud)
由于无法找到资源,Android Studio会引发参考错误.确切的错误是"无法解析符号test_file".
如何从androidTest资源包中存在的测试用例中引用此资源?
我正在尝试使用此行运行测试...但是这会启动所有测试:
./gradlew -DconnectedAndroidTest.single=LandingActivityTests connectedAndroidTest
Run Code Online (Sandbox Code Playgroud)
我该如何进行单一测试?
我已经决定使用Google的Espresso进行应用程序测试的测试标准之一是:
测试应在屏幕方向旋转后保持活动状态
使用Espresso时如何旋转屏幕?
我尝试了以下Robotium代码(是的,我在我的Espresso测试中放置了Robotium代码,所以起诉我)
solo.setActivityOrientation(solo.LANDSCAPE);
solo.setActivityOrientation(solo.PORTRAIT);
Run Code Online (Sandbox Code Playgroud)
但是当我在Espresso测试中运行它时,它会崩溃应用程序.
有没有办法做到这一点?
在此先感谢您的帮助
Robotium是一个Android测试自动化框架,完全支持本机和混合应用程序.
既然Android Studio是Android开发的事实上的 IDE,我有兴趣尝试使用Android Studio.但是,我找不到设置它的方法.
如何设置和使用Robotium来测试Android Studio?
我的问题似乎与此处有所不同测试运行失败:由于"进程崩溃",仪表运行失败.在测试多个Android活动时,
我遵循了pdf中给出的步骤.我已经创建了测试项目"TestAndroidCalculatorBlackbox"(我们需要有两个项目一个测试和一个主项目,也许这可能是原因,因为在Robotium"入门"链接他们希望我们为记事本创建项目),
并添加罐子robotium-solo-5.0.1.jar
,robotium-solo-1.6.0.jar
以摆脱solo.
功能和下面的红色错误行jay.way package
.
我附上错误截图:
y AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testcalculator"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.testcalculator" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:debuggable="true">
<uses-library android:name="android.test.runner" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我在仪表列表中添加了包:
c:\> adb shell pm list instrumentation
instrumentation:PACKAGE.test.test/android.test.InstrumentationTestRunner (target=PACKAGE)
instrumentation:PACKAGE.test.test.test.test.test.test/android.test.InstrumentationTestRunner (target=PACKAGE.test.test)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)
>> instrumentation:com.testcalculator/android.test.InstrumentationTestRunner (target=com.testcalculator) <<
Run Code Online (Sandbox Code Playgroud) 在我看来,robotium的设计方式是一次测试1个Activity而不是整个应用程序.
所以我的问题是如何测试一个期望将额外传递给它的活动?我的意思是额外的intent.putExtra("Something", object);
我们Navigation Drawer
从support.v4
图书馆获得了应用程序.我们自动进行UI测试Robotium
并且一切正常,但Navigation Drawer
可以随机冻结,因此某些测试可能会随机失败.
这绝对不是Robotium
问题,因为我看到了如何Navigation Drawer
在我的设备上的其他应用程序中冻结,也在我自己的应用程序中.
我已经尝试过修复Navigation Drawer
此问题的答案:为什么DrawerLayout有时会在打开时出现故障?
它帮助和随机冻结从90%减少到大约10%,但10%的测试运行可能会失败,这非常糟糕,特别是对于持续集成...
可能有人已经解决了这个问题吗?
我是Android的新手,我正在使用Robotium编写一些基本的Android测试,但这个例外失败了
"android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views."
Run Code Online (Sandbox Code Playgroud)
以下是基本的测试用例解释: -
测试用例:-
public void testSearch() {
Activity a = getActivity();
SearchItemActivity search = new SearchItemActivity(solo);
search.searchText("ipod", a);
}
SearchItemActivity.searchText(String) is defined as
public void searchText(final String search, Activity act) {
Button v = (Button) act
.findViewById(com.test.mobile.R.id.text_search_field);
((Button) v).setText("");
((Button) v).setText(search);
solo.sendKey(Solo.ENTER);
solo.waitForActivity("FoundItemdDetailActivity");
solo.assertCurrentActivity("Expected FoundItemDetail activity","FoundItemdDetailActivity");
}
Run Code Online (Sandbox Code Playgroud)
任何有关如何修改我的代码的建议都将受到赞赏
我的应用程序主要是GUI,它们与服务器通信以获取大部分信息.如果出现任何问题,通常会在网络调用中或对JSON对象做出错误的假设.
单元测试不适合这些与网络相关的任务和与i/o相关的任务,否则它们不会被称为单元测试.
所以我试图在我的案例中收集单元测试的要点.为什么我会测试Android按钮是否可以单击或EditText可以看到我键入的内容?我只是不明白实现这些繁琐的测试的效用
private void initElements(){
placeButton = (Button) findViewById(R.id.currplace);
placeButton.setText(MainActivity.this.getString(R.string.findingLocation));
placeButton.setEnabled(false);
selectplaceLayout = (LinearLayout)findViewById(R.id.selectplaceLayout);
selectplaceLayout.setVisibility(View.GONE);
splash = (RelativeLayout)findViewById(R.id.splashbg);
infoLayout = (LinearLayout)findViewById(R.id.infoLayout);
}
Run Code Online (Sandbox Code Playgroud)
如果以上方法通过,我的所有活动都在onCreate中运行,那么我知道应用程序有效.对此进行单元测试将是一个冗余耗时的事情.耗时,因为我不熟悉jUnit和Android测试框架中的所有方法.
所以,长话短说,重点是什么?有什么特别的方法我应该考虑这些测试吗?到目前为止,我所看到的所有示例和教程仅仅讨论了最简单的示例,为了简洁起见,但我无法想到在主要的客户端 - 服务器应用程序中进行单元测试的任何实际用途.
通过访问我已经知道并声明并初始化的android视图,我期望发现什么?我必须以过于有限的方式思考这个问题
所以,洞察力赞赏