Dart单元测试
精华
小牛编辑
158浏览
2023-03-14
单元测试涉及测试应用程序的每个单元。它可以帮助开发人员在不运行整个复杂应用程序的情况下测试小功能。
名为“test”的Dart外部库提供了编写和运行单元测试的标准方法。
Dart单元测试涉及以下步骤 -
第1步:安装 test 包
要在当前项目中安装第三方软件包,需要pubspec.yaml
文件。要安装 text 包,首先在pubspec.yaml
文件中进行以下输入 -
dependencies:
test:
输入后,右键单击pubspec.yaml
文件并获取依赖项。它将安装 test
包。下面给出了WebStorm编辑器中相同的屏幕截图。
包也可以从命令行安装。在终端中输入以下内容 -
$ pub get
第2步:导入 test 包
import "package:test/test.dart";
第3步,编写测试
使用顶级函数test()
指定测试,而使用expect()
函数进行测试断言。要使用这些方法,应将它们安装为pub
依赖项。
语法
test("Description 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));
});
})
示例1:传递测试
以下示例定义方法Add()
,此方法采用两个整数值并返回表示总和的整数。要测试这个add()
方法 -
第1步 - 导入测试包,如下所示。
第2步 - 使用test()
函数定义测试。这里test()
函数使用expect()
函数来强制执行断言。
import 'package:test/test.dart';
// Import the test package
int Add(int x,int y)
// Function to be tested {
return x+y;
}
void main() {
// Define the test
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!
示例2:失败测试
下面定义的subtract()
方法存在逻辑错误,下面将测试验证。
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
函数编写测试用例。因此在逻辑上将这些测试用例分组并为字符串。
示例
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