java - 如果我的大部分 Activity 方法都是私有(private)的,如何在 Android 中实践 TDD?

标签 java android unit-testing junit

我阅读了一些关于 TDD 和一般测试的内容,并决定尝试一下。

在了解如何在 Android Studio 中运行测试后,我意识到我的大部分方法都是私有(private)的(因此直接测试它们是错误的,按照此链接:How do I test a class that has private methods, fields or inner classes?)。

什么给了?这是设计味道吗?我应该以某种方式重构吗?

鉴于我应该只能在测试失败后编写代码,我将如何处理公共(public)方法很少的类,例如我的大部分 Activity ? 我错过了什么吗?

请记住,我是新手。

最佳答案

我谈论的大多数人都同意您应该只测试您的 API 方法。如果您假设类私有(private)方法的目的是支持公共(public)方法,那么您的公共(public)方法正常工作的事实有点意味着您的私有(private)方法也正常工作。

当我有一个有点复杂并且我真的认为应该进行单元测试的私有(private)方法时,我只是将它设为包私有(private)(没有修饰符),这样它就不会暴露在类 API 中,但仍然可以被测试访问类。

具体解决您的问题:

What gives? Is this a design smell? Should I refactor somehow?

这听起来不像是设计味道。相反,私有(private)方法多于公共(public)方法可能意味着您的类代码是模块化的并且遵循封装原则。

Given that I should only be able to write code after a failing test, how would I go about classes that have very few public methods, such as most of my activities? Did I miss something?

假设您要从头开始创建一个新类,我会这样做:

  1. 设计类API方法
  2. 对于每个 API 方法:
    1. 为方法编写单元测试
    2. 编写代码直到测试通过
    3. 重构方法,根据需要提取私有(private)方法

如果您这样做,您可以确保覆盖了您的私有(private)方法,因为您通过公共(public)方法测试了它们的功能。

还有一个代码覆盖工具,例如 JaCoCoCobertura可能有助于找出您的代码的哪些部分缺乏适当的测试。

关于java - 如果我的大部分 Activity 方法都是私有(private)的,如何在 Android 中实践 TDD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29001435/

相关文章:

java - 构建安全框架

java - CSV 到平面 xml java 程序

java - 我怎么知道我的神经网络正在被正确训练

java - 使用 Mockito Mock 对 Apache Camel Route 进行 JUnit 测试不会失败

android - getApplicationContext() 和 getActivity() 之间的区别

Ruby Test :Unit, 如何知道测试套件中每个测试用例的失败/通过状态?

java - 如何向 Web 服务发送 Soap 请求

java - 可以覆盖 Set 的 contains() 方法吗?

java - 尝试使用 SAXParser 解析 Android 应用程序中的 XML

android - CompoundButton Checkbox 在哪里/如何测量可绘制复选框的宽度