我正在尝试获得更多关于 JUnit 及其在 Android 中的使用的经验。参考this official Android training Parsing XML data我想知道是否有人可以提供一个关于如何测试一些使用的方法的示例。
特别是您将如何测试 StackOverflowXmlParser 类中包含的方法以及方法 loadXmlFromNetwork() 和 downloadUrl() [class NetworkActivity.java]
我正在尝试获得更多关于 JUnit 及其在 Android 中的使用的经验。参考this official Android training Parsing XML data我想知道是否有人可以提供一个关于如何测试一些使用的方法的示例。
特别是您将如何测试 StackOverflowXmlParser 类中包含的方法以及方法 loadXmlFromNetwork() 和 downloadUrl() [class NetworkActivity.java]
关于单元测试,我能给你的最好建议是首先真正理解什么是测试单元。当我编写测试,特别是单元测试时,我确保我的测试单元是一个类。其他一切都被嘲笑,我的测试确保类上的每个公共方法都做到了它所承诺的。
也就是说,您要询问的方法是EVIL UNTESTABLE CODE。看到这样的代码来自谷歌工程师,有点令人震惊。我的猜测是它是一个前端 Web 开发人员,因为变量都是在方法的顶部声明的,Javascript 样式和每个局部变量的初始化都没有值null
表明编写示例的人不是很有经验爪哇。
您将不得不对方法进行重大重构以使它们进入可测试状态。例如loadXmlFromNetwork
,提出了一个说谎的 API。它不是从网络“加载” xml,而是List<Entry>
在完成后将其解析为 then ,它通过将这些条目中的数据塞进 HTML 格式的字符串然后返回它来做更多的事情。
仅此方法的第一个问题是它在自身内部创建对象,而不是询问它需要什么。这给测试带来了问题,因为您无法模拟这些对象来测试逻辑。在测试中,您不希望必须建立网络依赖关系,因此您需要模拟HttpURLConnection
并模拟行为来练习您的代码。
要为您指明正确的方向,请观看 Google 首席测试布道者的这段视频: