【问题标题】:Android JUnit and parsing xml data - what to testAndroid JUnit 和解析 xml 数据 - 测试什么
【发布时间】:2013-03-10 09:18:55
【问题描述】:

我正在尝试获得更多关于 JUnit 及其在 Android 中的使用的经验。 参考这个官方的Android培训Parsing XML data我想知道是否有人可以提供一个关于如何测试一些使用的方法的例子。

特别是您将如何测试 StackOverflowXmlParser 类中包含的方法以及方法 loadXmlFromNetwork() 和 downloadUrl() [class NetworkActivity.java]

【问题讨论】:

  • 是的,但有时不是你决定要解析的格式文件的人,这篇文章的目的是促进某人在常见场景中的 JUnit(onAndroid) 学习。

标签: android xml-parsing xmlpullparser junit3


【解决方案1】:

我能给你的关于单元测试的最好建议是首先真正理解什么是测试单元。当我编写测试,特别是单元测试时,我确保我的测试单元是一个单一的类。其他一切都被嘲笑了,我的测试确保类上的每个公共方法都做到了它所承诺的。

也就是说,您询问的方法是EVIL UNTESTABLE CODE。看到这样的代码来自谷歌工程师,有点令人震惊。我的猜测是它是一个前端 Web 开发人员,因为变量都声明在方法的顶部,Javascript 样式和每个对 null 没有值的局部变量的初始化建议谁编写了示例 isn't very experienced with Java .

您必须对方法进行重大重构才能使它们进入可测试状态。例如loadXmlFromNetwork 提供了一个说谎的 API。它不是从网络“加载”xml,而是将其解析为List<Entry>,然后在完成之后,它通过将这些条目中的数据塞进一个HTML格式的字符串然后返回它来做更多的事情。

仅此方法的第一个问题是它在自身内部创建对象,而不是询问它需要什么。这给测试带来了问题,因为您无法模拟这些对象来测试逻辑。在测试中,您不想建立网络依赖关系,因此您需要模拟 HttpURLConnection 并模拟行为以执行您的代码。

要为您指明正确的方向,请观看 Google 首席测试宣传员的这段视频:

http://www.youtube.com/watch?v=wEhu57pih5w

【讨论】:

  • 抱歉,Christopher,这不是为了成为 Google 朋友,但据我所知,java 中的局部变量必须初始化,并且您的链接 (javapractices.com/topic/TopicAction.do?Id=14) 指的是 java 字段(初始化字段是多余的) .
  • 局部变量在使用点之前不应该被声明/初始化,除非你试图做一些事情,比如尝试在 try/catch 块之外使用它们的值。见here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2017-07-28
相关资源
最近更新 更多