Flutter:TDD单元测试

此前,我曾写过关于TDD(测试驱动开发)的文章在这里它解释TDD是如何工作的,以及它将如何在我们日常的日常开发工作有所帮助。提交新代码时,我们要确保我们的功能始终随着应用程序的增长而正常运行。

今天,我将直接介绍如何在Flutter本身中执行TDD。我将首先通过运行创建一个新项目flutter create tryunittesting

我们将测试2个简单的Login函数;validateUsernamevalidatePassword。让我们通过创建一个新的文件调用来分离登录逻辑,TextValidator.dart并这样实现:

class TextValidator {
  bool validateUsername(String username) {
    return false;
  }

  bool validatePassword(String password) {
    return false;
  }
}

TextValidator.dart

这两种方法都准备好实现,我们将首先编写测试。转到测试文件夹并删除widget_tests.dart。添加一个新的文件调用login_tests.dart。像这样实现测试用例:

import 'package:flutter_test/flutter_test.dart';
import 'package:tryunittesting/TextValidator.dart';

void main() {
  group('Given user is at Login Page', () {
    test(
        'and user keys in username, username should be at least 8 characters long',
        () {
      expect(TextValidator().validateUsername('test'), false);
      expect(TextValidator().validateUsername('testtest'), true);
    });

    test(
        'and user keys in a password, password must have at least 1 minimum upper case, 1 minimum lower case, 1 numeric number, 1 special character and is at least 8 characters long',
        () {
      expect(TextValidator().validatePassword('test'), false);
      expect(TextValidator().validatePassword('Hh1@2222'), true);
    });
  });
}

login_tests.dart

在这里,我们期望这些情况:

  1. 用户名至少应包含8个字符
  2. 密码至少应包含1个大写字母
  3. 密码至少应包含1个小写字符
  4. 密码至少应包含1个数字字符
  5. 密码至少应包含1个特殊字符
  6. 密码长度至少为8个字符

在实施之前,尝试运行flutter test test/login_test.dart,您可能会看到+0 -2: Some tests failed.这告诉我们0个测试通过(+)和2个测试失败(-)。

现在让我们以TDD模式修复它们!

前往TextValidator.dart并修复validateUsername

bool validateUsername(String username) {
 return username.length >= 8;
}

运行测试,您应该看到+1 -1

现在修复validatePassword

bool validatePassword(String password) {
  String pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$';
  return RegExp(pattern).hasMatch(password) && password.length >= 8;
}

在这里,我们使用regex来帮助我们验证模式。如果您现在再次运行测试,则应该+2: All Tests Passed!

您刚刚使用Flutter以TDD方式完成了对应用程序的基本测试!

翻译自:https://medium.com/flawless-app-stories/flutter-tdd-with-unit-tests-5aa73ec3bce5

你可能感兴趣的:(Flutter:TDD单元测试)