如果我的大部分活动都是如何在Android中练习TDD的话。方法是私有的吗?

时间:2015-03-12 03:36:21

标签: java android unit-testing junit

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

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

是什么给出的?这是一种设计气味吗?我应该以某种方式进行重构吗?

鉴于我应该只能在失败的测试后编写代码,我将如何进行公共方法很少的类,例如我的大多数活动? 我错过了什么吗?

请记住,我是新手。

1 个答案:

答案 0 :(得分:5)

我谈到的大多数人同意你应该只测试你的API方法。如果您认为类私有方法的目的是支持公共方法,那么您的公共方法正常工作的事实意味着您的私有方法也正常工作。

当我有一个有点复杂的私有方法并且我认为应该进行单元测试时,我只是将其设为package-private(无修饰符),因此它不会在类API中公开但仍可通过测试访问类。

具体解决您的问题:

  

是什么给出的?这是一种设计气味吗?我应该以某种方式进行重构吗?

听起来不像是设计气味。相反,拥有比公共方法更多的私有方法可能意味着您的类代码是模块化的并遵循封装原则。

  

鉴于我应该只能在失败的测试后编写代码,我将如何进行公共方法很少的类,例如我的大多数活动?我错过了什么吗?

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

  1. 设计类API方法
  2. 对于每种API方法:
    1. 编写方法的单元测试
    2. 编写代码,直到测试通过
    3. 重构方法,根据需要提取私有方法
  3. 如果你这样做,你可以确保你的私有方法被覆盖,因为你通过公共方法测试了他们的功能。

    此外,代码覆盖率工具(例如JaCoCoCobertura)可能有助于查找代码的哪些部分缺乏正确的测试。