如果我的大部分活动方法都是私有的,如何在 Android 中实践 TDD?

How to practice TDD in Android if most of my activities' methods are private?

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

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

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

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

请记住我是新手。

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

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

具体解决您的问题:

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

这听起来不像是设计风格。相反,拥有比 public 方法更多的私有方法可能意味着您的 class 代码是模块化的并且遵循封装原则。

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?

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

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

如果你这样做,你可以确保你的私有方法被覆盖,因为你通过 public 方法测试了它们的功能。

此外,JaCoCo or Cobertura 等代码覆盖工具可能有助于找出代码的哪些部分缺少适当的测试。