如何运行Android sdk sample中的单元测试

2024-12-19 23:07:47
推荐回答(3个)
回答1:

sample代码在SDK安装目录(X:\Android\android-sdk\samples)下。但在用Eclipse 开发环境导入的时候遇到了一些麻烦。网上看到有人是通过“File -> Import...”或“File -> New->Project -> Create Project From Existing Code”解决的,但我试过,都有点问题。后一种方法可成功导入,但工程没有复制到Eclipse的工作目录(X:\Eclipse\workspace),这样作为练习修改后,影响了原有Sample代码,可能失去了参考,而且还要将原SDK的Sample目录属性由只读改为可写。

那就是 "File -> New->Project -> Android Simple Project ”。
----------------------------
---------------------选择需要的Sample版本。
按“Finish”就完成了。
如果已经安装过,不用担心会误操作。
编译运行时注意模拟器上本来就含有ApiDemos应用,这导致以下出错信息。需要在 SDK 安装目录(X:\Android\android-sdk\platform-tools)下执行提示中命令“adb uninstall com.example.android.apis”来先卸载原有ApiDemos应用。
然后的修改就成功显示在新编译的应用中,比如在计时器里加上自己的id。

回答2:

测试androidsdk 开发单元测试
在安卓模拟器或者真机上跑测试用例速度很慢。构建、部署、启动app,通常需要花费一分钟或者更久。这不是TDD(测试驱动开发)模式.Robolectric提供一种更好的方式。
可能你一直尝试在java IDE中使用junit或者testng直接跑测试用例,但是一直报java.lang.RuntimeException: Stub!异常。
这个异常是因为在jdk中没有android运行环境。而现在Robolectric这款android单元测试工具,模拟了android sdk中的jar包,可以直接在jvm中运行测试用例,这样就大大节省了时间。一个Robolectric测试用例如下:
// Test class for MyActivity @RunWith(RobolectricTestRunner.class) public class MyActivityTest { @Test public void clickingButton_shouldChangeResultsViewText() throws Exception { Activity activity = Robolectric.buildActivity(MyActivity.class).create().get(); Button pressMeButton = (Button) activity.findViewById(R.id.press_me_button); TextView results = (TextView) activity.findViewById(R.id.results_text_view); pressMeButton.performClick(); String resultsText = results.getText().toString(); assertThat(resultsText, equalTo("Testing Android Rocks!")); } }

在安卓模拟器或者真机上跑测试用例速度很慢。构建、部署、启动app,通常需要花费一分钟或者更久。这不是TDD(测试驱动开发)模式.Robolectric提供一种更好的方式。
可能你一直尝试在java IDE中使用junit或者testng直接跑测试用例,但是一直报java.lang.RuntimeException: Stub!异常。
这个异常是因为在jdk中没有android运行环境。而现在Robolectric这款android单元测试工具,模拟了android sdk中的jar包,可以直接在jvm中运行测试用例,这样就大大节省了时间。一个Robolectric测试用例如下:
// Test class for MyActivity
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {

@Test
public void clickingButton_shouldChangeResultsViewText() throws Exception {
Activity activity = Robolectric.buildActivity(MyActivity.class).create().get();

Button pressMeButton = (Button) activity.findViewById(R.id.press_me_button);
TextView results = (TextView) activity.findViewById(R.id.results_text_view);

pressMeButton.performClick();
String resultsText = results.getText().toString();
assertThat(resultsText, equalTo("Testing Android Rocks!"));
}
}

SDK,Resource和Native Method模拟
Robolectric可以处理控件展示、资源加载和很多使用native C实现的真机上的其他功能。所以我们可以使用Robolectric来模拟真机上的大部分操作。我们可以很方便地获取Robolectric的源码,直接查看它的模拟机制,所以使用Robolectric,我们也可以模拟错误条件和一些真实的传感器信号。
脱离模拟器执行测试用例
Robolectric允许我们在项目工程中或者持续集成(CI如hudson、jenkins)中使用jvm来执行测试用例,所以就省掉了打包、安装的过程,将测试用例的执行时间由分钟级降到秒级。
不再需要Mock框架
使用一些Mock框架,如Mockito或者Android Mock等,可以模拟出android运行环境,达到和Robolectric相同的效果。这是一个有效的方法,但是使用这种方法写出的测试用例,很多情况下就是开发代码的反实现。
Robolectric的测试风格更偏向于黑盒测试,robolectric式的测试用例更加关注与app的表现,而不是android运行环境的实现,所以使用robolectric写出的测试用例更有效。当然这也是看测试人员的喜好,如果喜欢可以同时使用Robolectric和mock框架。

回答3:

初学Android编程,Android SDK中提供的Sample代码自然是最好的学习材料。 Sample代码在SDK安装目录(X:\Android\android-sdk\samples)下。但我在用Eclipse 开发环境导入的时候遇到了一些麻烦。网上看到有人是通过“File -> Import...”或“File -> New->Project -> Create Project From Existing Code”解决的,但我试过,都有点问题。后一种方法可成功导入,但工程没有复制到Eclipse的工作目录(X:\Eclipse\workspace),这样作为练习修改后,影响了原有Sample代码,可能失去了参考,而且还要将原SDK的Sample目录属性由只读改为可写。 一番倒腾后,我发现,Eclipse已经提供了很方便的导入方法。那就是 "File -> New->Project -> Android Simple Project ”。下面是操作截图,一看即明,很简单。
----------------------------
---------------------选择你需要的Sample版本。
选择你需要研究的Sample类型,ApiDemos是最基本的,很适合初学者。按“Finish”就完成了。
如果已经安装过,你不用担心会误操作。
编译运行时注意模拟器上本来就含有ApiDemos应用,这导致以下出错信息。需要在 SDK 安装目录(X:\Android\android-sdk\platform-tools)下执行提示中命令“adb uninstall com.example.android.apis”来先卸载原有ApiDemos应用。
然后我们的修改就成功显示在新编译的应用中,比如在计时器里加上自己的id。