2015-08-08 71 views
2

我正在学习Android(和一般)的单元测试。什么样的单元测试 - 简单验证类

实践中,我构建了一个简单的输入验证器类,用于检查电子邮件和密码输入的有效性。

它有2种方法:

  • isEmailValid(字符串email) - 检查该邮件不为空,不是空的,是一个有效的电子邮件。
  • isPasswordValid(字符串密码) - 检查密码是否不为空或空

所以我想创建以下测试:

  • 电子邮件= “” - 返回
  • email = null - 返回false
  • email =“aaa” - return false
  • 电子邮件= “[email protected]” - 返回真正
  • 密码= “” - 返回
  • 密码= NULL - 返回
  • 密码= “通行证” - 回归true

我说得对吗?或者这是“测试矫枉过正”?

+0

我完成了这个非常简单的项目,并将其上传到github:https://github.com/dors/simple-android-validator-unit-test – dors

回答

2

我会说这不是矫枉过正。这取决于它们如何在JUnit代码中编写以及代码是如何编写的。每个测试都会检查不同的逻辑路径,并且以用户为中心的Android,这些场景对于检查是非常重要的,因为用户会做出令人惊讶的事情。

例如,每个测试只应该做一个单独的断言通常是确保它正在测试单个单元的良好实践。 您是否测试了代码的错误处理部分?和任何可能的分支?

也可以看看使用ECLEmma来检查您的代码覆盖率,以检查它是否足够覆盖代码并提供度量标准。这似乎只适用于使用标准启动程序的JUnit,它取决于您使用的是什么环境,以及如果您只是在没有android代码的情况下进行JUnit测试。从使用Roboelectric的评论中,可以找到here代码覆盖的替代方法和教程。

您可能还想看看如何使用Robotium执行系统级别(用户界面)测试,其中可以测试用户交互。

我也会说读一般的单元测试。测试应该是孤立的,使用Mock对象将会有所帮助,并且会改善代码中的依赖注入。例子是JMockitMockito。这些将使您在使用例如SQLite进行测试时更轻松。启用单元测试以专注于测试单个类将改善依赖注入和整体设计。

测试还应该将干净的代码标准作为您的应用程序代码保存下来,以供将来用户理解。

+0

感谢您的详细解答!这个简单的项目国际海事组织不需要模拟。另外,我使用RobolectricTestRunner,以便我能够使用类似TextUtils的类从我的junit测试 – dors

+0

@dors没问题。我添加了代码覆盖率和Roboelectric的链接。 – Matt