语法高亮工具如何实现自动化测试?
Posted
技术标签:
【中文标题】语法高亮工具如何实现自动化测试?【英文标题】:How do syntax highlighting tools implement automated testing? 【发布时间】:2017-08-01 23:43:29 【问题描述】:pygments 和textmate bundle 等语法高亮工具如何进行自动化测试?
【问题讨论】:
【参考方案1】:这样的工具通常会简单地求助于代表所选输入和预期输出的大量 sn-ps 文本集合。例如,如果您查看Pygments Github,您会看到它们有巨大的文本文件列表,分为input
部分和tokens
部分,如下所示:
---input---
f'"quoted string"'
---tokens---
'f' Literal.String.Affix
"'" Literal.String.Single
'' Literal.String.Interpol
'"' Literal.String.Double
'quoted string' Literal.String.Double
'"' Literal.String.Double
'' Literal.String.Interpol
"'" Literal.String.Single
'\n' Text
由于突出显示工具读取一段代码,然后必须识别哪些文本位是哪些代码位的一部分(这是函数的开始吗?这是注释吗?它是变量名吗?),他们通常会执行各种处理步骤,这些步骤将产生一个如上所述的令牌列表,然后他们可以将其输入到下一步(从第一个 Literal.String.Interpol
到下一个插入突出显示,加粗任何 Literal.String.Single
等。通过生成适当的 html 或 CSS 或其他与系统相关的标记)。检查这些标记是否从输入文本中正确生成是关键。
然后,根据工具内置的语言,您可以使用现有的测试套件或构建自己的测试套件(pygments 似乎使用名为pyTest 的基于 Python 的工具),这基本上包括运行每个 @ 987654328@s 循环通过您的工具,读取输出,并将其与预期值进行比较。如果输出不匹配,您可以显示一条消息,显示什么测试失败,输入/输出/预期/错误值是什么。如果输出通过,您可以简单地用快乐的绿色复选标记发出信号。然后,当测试完成时,开发人员有望通过查看结果来推断出他们破坏了什么。
随机化这些输入的顺序通常是个好主意,这样您就可以确保测试中的每个步骤都不会产生副作用,这些副作用会传递到下一个测试并导致它通过或失败错误地。对完整测试的长度进行计时也是一个好主意。如果昨天整个过程需要 12 秒,但现在需要 2 分钟,那么即使所有测试在技术上“通过”,我们也可能会破坏某些东西。
在诸如代码荧光笔之类的工具中,您通常可以很好地了解许多输入和输出的外观,然后才能对所有内容进行编码,例如,如果某个规范文档已经存在。在这种情况下,包含您知道不会立即通过的测试可能是一个好主意,但用一些标签标记它们(可能是文件中的一些文本标记,上面写着“不通过”,或者将文件命名为某种方式),并告诉您的测试套件期望这些测试失败。然后,当您修复错误并添加功能时,假设您修复了错误 X 以尝试使测试 #144 通过。现在,当您运行文本时,它还会提醒您其他 10 个应该失败的测试现在正在通过。恭喜!您刚刚为自己节省了大量工作,试图解决实际上是由同一个根本问题引起的几个不同的问题。
随着代码库的更新,开发人员将运行并重新运行测试,以确保他所做的任何更改都不会破坏以前工作的测试,然后将新测试添加到集合中以验证他的新功能,固定边缘情况等,现在有一个已知的预期输出,您可以确定将来不会有人意外破坏。
【讨论】:
以上是关于语法高亮工具如何实现自动化测试?的主要内容,如果未能解决你的问题,请参考以下文章