什么单元测试 - 简单的验证类

时间:2015-08-08 06:53:23

标签: android unit-testing

我正在学习Android(以及一般)中的单元测试。

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

它有两种方法:

  • isEmailValid(String email) - 检查电子邮件是否为空,不为空并且是有效的电子邮件。
  • isPasswordValid(String password) - 检查密码是否为空或空

所以我考虑创建以下测试:

  • email =“” - 返回 false
  • email = null - 返回 false
  • email =“aaa” - 返回 false
  • email =“a@valid.email” - 返回 true
  • password =“” - 返回 false
  • password = null - 返回 false
  • password =“pass” - 返回 true

我做对了吗?或者这是“测试过度杀伤”?

1 个答案:

答案 0 :(得分:2)

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

例如,每个测试应该只做一个断言通常是好的做法,以确保它测试单个单元。 您是否测试过代码的错误处理部分?还有任何可能的分支?

还可以查看使用ECLEmma来检查代码覆盖率,以检查它是否足以覆盖代码并提供指标。这只在将JUnit与标准启动器一起使用时才起作用,它取决于您使用的环境,以及您是否只是在没有安卓代码的情况下进行JUnit测试。从使用Roboelectric的评论中,可以找到here替代方法和教程以进行代码覆盖。

您可能还希望使用Robotium来执行可以测试用户交互的系统级(用户界面)测试。

我还会说一般关于单元测试的内容。应该隔离测试,使用Mock对象将有助于此并且将改进代码中的依赖注入。示例包括JMockitMockito。这些将使您在使用例如SQLite进行测试时更轻松。启用单元测试以专注于测试单个类将改善依赖注入和整体设计。

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