单元测试涉及测试应用程序的每个单独的单元,它可以帮助开发人员在不运行整个复杂应用程序的情况下测试小的函数。
Dart 外部库名为" test",提供了编写和运行单元测试的标准方法。
Dart单元测试包括以下步骤-
第1步 - 安装"test"软件包
要在当前项目中安装第三方软件包,您将需要 pubspec.yaml 文件,要安装测试包,请首先在 pubspec.yaml 文件中输入以下内容-
dependencies: test:
输入后,右键单击 pubspec.yaml 文件并获取依赖项,它将安装"测试" 软件包,下面给出的是 WebStorm 编辑器中相同内容的屏幕截图。
也可以从命令行安装软件包,在终端中输入以下内容-
pub get
第2步 - 导入test.dart测试包
import "package:test/test.dart";
第3步 - 编写测试
使用顶级函数 test()指定测试,而使用 expect()函数进行 test断言,要使用这些方法,应将它们安装为 pub 依赖项。
test("描述 of the test ", () { expect(actualValue , matchingValue) });
group()函数可用于对测试进行分组,每个组的描述将添加到其测试描述的开头。
group("some_Group_Name", () { test("test_name_1", () { expect(actual, equals(exptected)); }); test("test_name_2", () { expect(actual, equals(expected)); }); })
以下示例定义了方法 Add(),此方法采用两个整数值,并返回表示 sum 的整数。要测试此 add()方法-
步骤1 - 如下所示导入 test 包。
步骤2 - 使用 test()函数定义测试,在这里, test()函数使用 expect()函数来强制声明。
import 'package:test/test.dart'; //I导入测试包 int Add(int x,int y) return x+y; } void main() { //定义测试 test("test to check add method",(){ //Arrange var expected=30; //Act var actual=Add(10,20); //Asset expect(actual,expected); }); }
它应该产生以下输出-
00:00 +0: test to check add method 00:00 +1: All tests passed!
下面定义的 subtract()方法有一个逻辑错误,以下 test 进行了验证。
import 'package:test/test.dart'; int Add(int x,int y){ return x+y; } int Sub(int x,int y){ return x-y-1; } void main(){ test('test to check sub',(){ var expected=10; //Arrange var actual=Sub(30,20); //Act expect(actual,expected); //Assert }); test("test to check add method",(){ var expected=30; //Arrange var actual=Add(10,20); //Act expect(actual,expected); //Asset }); }
输出 - 函数 add()的测试用示例通过,但是对 subtract()的测试失败,如下所示。
00:00 +0: test to check sub 00:00 +0 -1: test to check sub Expected: <10> Actual: <9> package:test expect bin\Test123.dart 18:5 main.<fn> 00:00 +0 -1: test to check add method 00:00 +1 -1: Some tests failed. Unhandled exception: Dummy exception to set exit code. #0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:938) #1 _microtaskLoop (dart:async/schedule_microtask.dart:41) #2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50) #3 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:394) #4 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:414) #5 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
您可以将测试用示例分组,以便为测试代码增加更多含义,如果您有很多测试用示例,则有助于编写更简洁的代码。
在给定的代码中,我们正在编写 split()函数和 trim 函数的测试用示例,因此,我们在逻辑上将这些测试用示例分组,并将其命名为 String 字符串。
import "package:test/test.dart"; void main() { group("String", () { test("test on split() method of string class", () { var string="foo,bar,baz"; expect(string.split(","), equals(["foo", "bar", "baz"])); }); test("test on trim() method of string class", () { var string=" foo "; expect(string.trim(), equals("foo")); }); }); }
输出 - 输出将为每个测试用示例添加组名,如下所示-
00:00 +0: String test on split() method of string class 00:00 +1: String test on trim() method of string class 00:00 +2: All tests passed
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Tony Bai · Go语言第一课 -〔Tony Bai〕