单元测试-简单的验证类



我正在学习Android中的单元测试。

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

有两个方法:

  • isEmailValid(String email) -检查邮件不是空的,不是空的,是一个有效的邮件。
  • isPasswordValid(String password) -检查密码是否为空

所以我想创建以下测试:

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

我写对了吗?或者这是一种"过度测试"?

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

例如,每个测试应该只执行单个断言,这通常是确保测试单个单元的良好实践。您测试过代码的错误处理部分了吗?有可能的分支吗?

还可以使用ECLEmma检查代码覆盖率,以检查它是否充分覆盖了代码并提供了一个度量。这似乎只有在使用JUnit和标准启动器时才有效,这取决于您使用的环境,如果您只是在没有android代码的情况下进行JUnit测试。从使用Roboelectric的评论中可以找到另一种方法和教程,可以在这里找到代码覆盖。

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

我还会说阅读单元测试的一般内容。测试应该是隔离的,使用Mock对象将有助于这一点,并将改进代码中的依赖项注入。例如JMockit或Mockito。这将使您在使用SQLite等工具进行测试时更加轻松。使单元测试专注于测试单个类将改进依赖注入和您的整体设计。

测试还应该保持干净的代码标准作为您的应用程序代码,在那里它们应该是可读的,以便将来的用户理解。

最新更新