Unit testing 如何断言pyparsing.ParseResults内容?

Unit testing 如何断言pyparsing.ParseResults内容?,unit-testing,pyparsing,Unit Testing,Pyparsing,我想在pyparsing.ParseResults类及其内容上使用Pythonassert进行验证 下面给出了Python pyparsing代码的一个工作片段: import pyparsing as pp first = pp.Word(pp.srange('[a-zA-Z]'), exact=1) rest = pp.Optional(pp.Word(pp.srange('[_0-9a-zA-Zz]'))) keyName = pp.Combine(first + rest) 简单的打印

我想在
pyparsing.ParseResults
类及其内容上使用Python
assert
进行验证

下面给出了Python pyparsing代码的一个工作片段:

import pyparsing as pp
first = pp.Word(pp.srange('[a-zA-Z]'), exact=1)
rest = pp.Optional(pp.Word(pp.srange('[_0-9a-zA-Zz]')))
keyName = pp.Combine(first + rest)
简单的打印输出是(并且会产生误导):

当然,以下断言失败:

# Unit test that is faulty
assert keyName.parseString("Abc_de") == ['Abc_de']
单元测试失败。。。因为
['Abc_de']
的类型是
列表
,而
keyName.parseString(“Abc_de”)
的类型是


我应该调用什么方法才能轻松地进行断言?

parseString
返回的结果使用
asList
方法

import pyparsing as pp
first = pp.Word(pp.srange('[a-zA-Z]'), exact=1)
rest = pp.Optional(pp.Word(pp.srange('[_0-9a-zA-Zz]')))
keyName = pp.Combine(first + rest)

assert keyName.parseString('Abc_de').asList() == ['Abc_de']

抱歉,我遗漏了
assert
asList
实际上是parseString返回的ParseResults上的一个方法,而不是parseString本身,但这是正确的方法。您还可以使用
Word
的双参数形式简化
keyName
的定义:
keyName=pp.Word(pp.srange(“[a-zA-Z]”),pp.srange('[u 0-9a-zA-Z]'))
。第一个参数是允许的前导字符字符串,第二个参数是允许的(但不是必需的)正文字符列表。
import pyparsing as pp
first = pp.Word(pp.srange('[a-zA-Z]'), exact=1)
rest = pp.Optional(pp.Word(pp.srange('[_0-9a-zA-Zz]')))
keyName = pp.Combine(first + rest)

assert keyName.parseString('Abc_de').asList() == ['Abc_de']