Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 更好地定义“a”的方法;接受;及;“不接受”;单元测试匹配器_Dart_Matcher_Dart Unittest - Fatal编程技术网

Dart 更好地定义“a”的方法;接受;及;“不接受”;单元测试匹配器

Dart 更好地定义“a”的方法;接受;及;“不接受”;单元测试匹配器,dart,matcher,dart-unittest,Dart,Matcher,Dart Unittest,我想定义匹配器来检查解析器是否可以接受字符串。我做了,但感觉不好 Dart单元测试代码: 库测试\u解析器; 导入“包:unittest/unittest.dart”; 导入“../lib/shark_parser.dart”; main(){ SharkParser解析器; 设置((){ parser=new SharkParser(); }); 拆卸(){ parser=null; }); 组(“paramType解析器”,(){ 测试(“应接受有效类型”,(){ expect(parser

我想定义匹配器来检查解析器是否可以接受字符串。我做了,但感觉不好

Dart单元测试代码:

库测试\u解析器;
导入“包:unittest/unittest.dart”;
导入“../lib/shark_parser.dart”;
main(){
SharkParser解析器;
设置((){
parser=new SharkParser();
});
拆卸(){
parser=null;
});
组(“paramType解析器”,(){
测试(“应接受有效类型”,(){
expect(parser.paramType(),accept(“String”);
expect(parser.paramType(),accept(“int”);
expect(parser.paramType(),accept(“List”);
expect(parser.paramType(),accept(“List”);
});
测试(“不应接受无效类型”,(){
expect(parser.paramType(),notAccept(“#”);
expect(parser.paramType(),notAccept(“0”);
expect(parser.paramType(),notAccept(“String()”));
expect(parser.paramType(),notAccept(“List”);
});
});
}
自定义匹配器:

Matcher-accept(字符串匹配字符串)=>new-AcceptMatcher(匹配字符串);
匹配器notAccept(字符串匹配字符串)=>新的NotAcceptMatcher(匹配字符串);
类NotAcceptMatcher扩展了Matcher{
字符串匹配字符串;
NotAcceptMatcher(this.matchingString);
布尔匹配(项目、映射匹配状态){
return!item.end().accept(匹配字符串);
}
描述(描述){
返回description.add(“解析器不接受字符串:$matchingString”);
}
描述描述不匹配(项目、描述不匹配描述、,
映射匹配状态,bool verbose){
描述不匹配。添加(“接受”);
返回不匹配的描述;
}
}
类AcceptMatcher扩展Matcher{
字符串匹配字符串;
AcceptMatcher(this.matchingString);
布尔匹配(项目、映射匹配状态){
return item.end().accept(匹配字符串);
}
描述(描述){
返回description.add(“解析器接受字符串:$matchingString”);
}
描述描述不匹配(项目、描述不匹配描述、,
映射匹配状态,bool verbose){
描述不匹配。添加(“不接受”);
返回不匹配的描述;
}
}
您可以看到,我必须定义两个匹配器
NotAcceptMatcher
AcceptMatcher
。逻辑是非常相似的,但我不知道如何使它简单


还有其他更简单的解决方案吗?

您可以使用
isNot
匹配器反转
接受
匹配器:

expect(parser.paramType(),isNot(accept(“#”));
它读起来有点滑稽,因此您可以创建一个函数来执行此操作:

Matcher notAccept(字符串s)=>isNot(接受);
expect(parser.paramType(),notAccept(“#”);
描述可能读起来并不完美,但它为您节省了一些工作

matcher可能看起来很冗长,但如果您愿意,可以通过去掉一些类型注释和使用简短的变量名,使matcher定义更加简洁。当我编写一个由框架调用的类或函数时,我发现这是一个不错的折衷办法,因为我不担心为其他用户编写文档

类接受匹配器扩展匹配器{
最终接受字符串;
AcceptMatcher(this.acceptString);
匹配(item,)=>item.end().accept(acceptString);
描述(d)=>d.add(“解析器接受字符串:$acceptString”);
描述不匹配(项,d,uu,uuu)=>d..add(“不接受”);
}
另一个选项是只使用
谓词
匹配器:

匹配器接受(字符串s)=>
谓词((i)=>i.end().accept,“解析器接受$s”);