Android 它是单元测试还是集成测试?

Android 它是单元测试还是集成测试?,android,unit-testing,tdd,Android,Unit Testing,Tdd,我正在做一个学校项目,我正在研究Android应用程序的测试可能性 在这一页上:谷歌写了关于单元测试的文章。 这真的是单元测试吗?单元测试不会集成所有类,也不会在此上下文中进行测试 所以我的观点是,它不是一个单元测试,而是一个集成测试。 你怎么看?我认为对于什么是单元测试没有任何共识,所以很难说。虽然有些人可能会认为它应该是一个非常小的代码单元(例如,一个方法),但这是相当有限的,特别是考虑到当您重构一个通过的测试时,您可能会将该代码放入多个方法甚至类中 详情如下: 单元测试是一种快速的内存测试

我正在做一个学校项目,我正在研究Android应用程序的测试可能性

在这一页上:谷歌写了关于单元测试的文章。 这真的是单元测试吗?单元测试不会集成所有类,也不会在此上下文中进行测试

所以我的观点是,它不是一个单元测试,而是一个集成测试。
你怎么看?

我认为对于什么是单元测试没有任何共识,所以很难说。虽然有些人可能会认为它应该是一个非常小的代码单元(例如,一个方法),但这是相当有限的,特别是考虑到当您重构一个通过的测试时,您可能会将该代码放入多个方法甚至类中

详情如下:

单元测试是一种快速的内存测试, 一致性、自动化和可重复性 工作单元的功能测试 系统

工作单元是任何功能性的 包含的系统中的场景 逻辑。它可以短到一个字母 函数,或者它可以跨越多个 类和函数,并提供 对客户的内部或业务价值 正在测试的系统


在我看来,“快速”和“内存中”是将其与集成测试区分开来的主要因素。如果你这么说的话,那么我认为谷歌测试确实是单元测试。

大家好

我想补充一点,根据我的经验,最好测试一个对象的行为,如果它做了您需要它做的事情(对于您的问题域),无论它是一个方法还是多个方法来通过您的测试。 我知道这听起来像是简单的测试方法,但还有更多。 Nat Pryce和Steve Freeman撰写的《由测试引导的不断增长的面向对象软件》是一本有助于理解这一点的好书

总而言之,好问题,好答案。
继续保持下去。:-)

在以下情况下,测试不是单元测试:

  • 它与数据库通信
  • 它通过网络进行通信
  • 它涉及到文件系统
  • 它不能与任何其他单元测试同时运行
  • 您必须对您的环境执行特殊操作(例如编辑配置文件)才能运行它

该链接出现404错误。抱歉,已修复该链接…这肯定是一个集成测试。如果你想对android应用程序进行单元测试,试试robolectric。我在那个链接上仍然得到404(我宁愿强调“独立的”而不是在内存中。自包含测试不涉及磁盘访问、网络、进程间通信、环境变量或被测试单元外部的其他状态。如果可以为整个程序编写符合此特征的测试,则它是单元测试。自包含、一致性、可重复性、nd自动性是隐含的。在unittest中,外部状态通常通过模拟来模拟。来自谷歌的示例都需要一个模拟器来进行测试。这需要很多时间,而且它们不是独立的。一些来自谷歌的人使使用JVM而不是de DVM进行测试成为可能()。所以这看起来更独立……看起来谷歌使用了错误的词?@Lie Ryan-听起来很合理,尽管我不认为“独立”是一个非常明确的定义。至少“在内存中”是相当容易确定的-尽管你可以使用内存中的数据库,并且几乎可以使用“单元”测试来测试整个系统,但这并不容易听起来不错。我认为这是一个“单元测试”。测试需要一些环境才能运行。所有这些都需要,只要环境是自包含且可编写脚本的,为什么环境的细节很重要?@lans-是的,对模拟器的需求确实有点混乱。当然,对于整个系统,我会将“单元测试”定义为不需要这样的环境就可以运行的测试铁或其他配置(例如使用POJOS),而涉及仿真器的端到端样式测试,我会考虑集成测试。虽然罗伊的定义似乎没有任何区别。