问题描述
item_list returns [EnumSet<Item> value]
: item { $value = EnumSet.of($item.value); }
| item_list ',' item { $value = $item_list.value; $value.add($item.value); }
这只是语法中的一条规则:item_list
本身不是有效的表达式。但是我想对单个规则以及整个语法进行单元测试。我尝试了一种看起来像这样的方法:
@Test
void testItemList() {
assertthat(parse("dog,car").item_list().value).containsOnly(Item.DOG,Item.CAR);
}
不幸的是,解析器在此文本上失败,因为它在识别要使用的规则之前正在寻找EOF。我可以人为地添加新规则:
item_list_test returns [EnumSet<Item> value]
: item_list EOF { $value = $item_list.value; }
然后允许测试通过(使用.item_list_test()
)。
这显然是个难题,纯粹出于测试目的而需要添加无用的规则。有没有办法强制解析器将规则解析为好像已终止?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)