Android中有多种单元测试方法,测试我自己编写的自定义视图的最佳方法是什么?
我目前正在测试它作为我在仪器测试案例中的活动的一部分,但我宁愿只测试视图,孤立。
答案 0 :(得分:20)
缺少以View为中心的TestCase实现的简单解决方案是在您的测试项目中创建一个包含您的视图的简单Activity。这将允许您使用简单的Activity对视图编写测试。有关活动测试的信息:
http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
答案 1 :(得分:18)
单元测试是一种方法,通过该方法测试各个源代码单元以确定它们是否适合使用。因此,当您说要测试自定义视图时,可以检查自定义视图的各种方法,如“onTouchEvent”,“onDown”,“onFling”,“onLongPress”,“onScroll”,“onShowPress”,“onSingleTapUp”, “onDraw”和其他各种因素取决于您的业务逻辑。您可以提供模拟值并对其进行测试。我建议使用两种测试自定义视图的方法。
1)猴子测试 猴子测试是由自动化测试工具执行的随机测试。猴子测试是在没有特定测试的情况下运行的单元测试。在这种情况下,猴子是任何输入的生产者。例如,猴子测试可以将随机字符串输入到文本框中以确保处理所有可能的用户输入或提供垃圾文件以检查对其数据盲目信任的加载例程。这是一个黑盒子测试技术,它可以在很多独特的条件下检查你的自定义视图,你会感到惊讶:)。
2)单元测试
2a)使用Robotium单元测试框架
转到Robotium.org或http://code.google.com/p/robotium/并下载示例测试项目。 Robotium是一个非常易于使用的框架,可以轻松快速地测试Android应用程序。我创建它是为了尽可能轻松地测试高级Android应用程序。它与ActivityInstrumentationTestCase2一起使用。
2b)使用Android测试框架
以下是参考资料的链接: http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html 和 http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
对于初学者: http://developer.android.com/guide/topics/testing/testing_android.html
据一位用户说:除了轻松测试非平台 依赖逻辑我还没找到 到目前为止,聪明的方式运行测试(at 至少对我来说)任何实际的平台 逻辑测试很麻烦。它的 无论如何,这几乎是微不足道的因为我 发现实施方面的差异 模拟器和我的实际之间 设备,我讨厌运行单元测试 我的设备上的实现只是为了 之后删除申请。
我的策略是:努力做到 简洁,使逻辑很好 想出来然后测试 逐件实施(少 然后是可取的。)
此外,Stephen Ng为Android项目解决方案提供了真正的单元测试方法:https://sites.google.com/site/androiddevtesting/
一位用户进行了截屏视频。
这是关于我如何让单元测试工作的ScreenCast。简单单位 测试和更复杂的单元测试 依赖于参考 上下文或活动对象。 http://www.gubatron.com/blog/2010/05/02/how-to-do-unit-testing-on-android-with-eclipse/ 强>
希望它可以帮助您在所有可能的条件下测试自定义视图:)
评论(futlib)您的所有建议似乎都涉及测试ACTIVITY,而我真的只想测试VIEW。我可能想在其他活动中使用这个视图,所以对我来说用特定的一个测试它没有多大意义。 - futlib
答案:要实现自定义视图, 你通常会先提供 某些标准的覆盖 框架调用的方法 所有观点。例如“onDraw”, “onKeyDown(int,KeyEvent)”, “onKeyUp(int,KeyEvent)”, “onTrackballEvent(MotionEvent)”等 你的自定义视图。所以当你想要的时候 为您的自定义进行单元测试 必须测试这些方法,并且 为它提供模拟值 可以测试所有的自定义视图 可能的情况。测试这些方法 并不意味着你正在测试你的 ACTIVITY,但它意味着测试你的 自定义视图(方法/功能) 在一项活动中。你也会 必须将您的自定义视图放在一个 活动最终为您的目标 用户体验它。一旦 彻底测试,您的自定义视图 可以放在很多项目中 许多活动。
答案 2 :(得分:15)
这是一个不同的建议,在许多情况下工作正常:假设您从布局文件中引用自定义视图,您可以使用AndroidTestCase,对视图进行充气,然后单独对其执行测试。这是一些示例代码:
my_custom_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<de.mypackage.MyCustomView ...
MyCustomView.java:
public class MyCustomView extends LinearLayout {
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setTitle(CharSequence title) {
((TextView) findViewById(R.id.mylayout_title_textView)).setText(title);
}
...
MyCustomViewTest.java:
public class MyCustomViewTest extends AndroidTestCase {
private MyCustomView customView;
@SuppressLint("InflateParams")
@Override
protected void setUp() throws Exception {
super.setUp();
customView = (MyCustomView) LayoutInflater.from(getContext())
.inflate(R.layout.my_custom_layout, null);
}
public void testSetTitle_SomeValue_TextViewHasValue() {
customView.setTitle("Some value");
TextView titleTextView = (TextView) valueSelection.findViewById(R.id.mylayout_title_textView);
assertEquals("Some value", titleTextView.getText().toString());
}
...