65.9K
CodeProject 正在变化。 阅读更多。
Home

生成元字符串以测试您的应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (9投票s)

2007年9月8日

CPOL

3分钟阅读

viewsIcon

29896

downloadIcon

179

一个用于生成自描述字符串的实用工具,这些字符串可用于测试应用程序的字符串处理能力。

引言

元字符串描述了它自身的长度和内部偏移量。 元字符串对于测试应用程序接受和处理任意长度字符串的能力非常有用,而不会截断它们,因为您可以一目了然地看出元字符串是否被截断以及截断的位置。

例如,假设应用程序需要在“属性”对话框的某个文本框中处理最多 10,000 个字符。 您可以轻松生成一个 10,000 个字符的元字符串,将其粘贴进去,并一目了然地知道它是否“适合”,或者在保存和重新加载后是否被截断。

元字符串的定义

元字符串基本上是一个数字列表,每个数字等于它在字符串中的位置。 字符串中的数字由您选择的字符分隔,例如短划线。 元字符串有两种类型:递减和递增。 以下递增和递减元字符串的长度均为 60 个字符

1-3-5-7-9-12-15-18-21-24-27-30-33-36-39-42-45-48-51-54-57-60
60-57-54-51-48-45-42-39-36-33-30-27-24-21-18-15-12-9-7-5-3-1

递增元字符串的属性

递增元字符串中的数字告诉您每个数字末尾字符串的长度(或位置)。 因此,递增字符串始终以字符串的总长度结尾。 但是,它们并不总是以“1”开头。 有时它们以“-2”开头,如以下示例所示。 在不实际生成字符串的情况下,很难预测给定长度会发生哪种情况。

-2-4-6-8-11

递增元字符串可以很容易地知道字符串在右侧被截断后的新长度是多少。 例如,您可以看出以下字符串已被截断,新长度为 29。只需从最后一个完整的数字 (27) 开始,然后数两个字符到结尾。 不幸的是,仅凭外观无法知道原始长度是多少。 此外,如果字符串在“错误”的长度(例如 27)处被截断,则除非您知道原始长度,否则无法判断它是否被截断。

1-3-5-7-9-12-15-18-21-24-27-3

递减元字符串的属性

递减元字符串中的数字告诉您从每个数字的开头(即包括数字本身)字符串中剩余的字符数。 因此,递减字符串始终以字符串的总长度开头。 它们总是以“1”或“2-”结尾。

如果递减字符串不是以“1”或“2-”结尾,则您知道它已在右侧被截断。 您可以通过查看字符串的开头来知道原始长度。 您可以通过查看结尾并进行减法来知道丢失了多少字符。

例如,您可以看出以下字符串最初有 255 个字符。 您可以通过找到最后一个完整的数字 (215) 并从该点到结尾的字符数 (4) 中减去该字符数来知道丢失了 211 个字符。 因此,此字符串的长度为 255 - 211 = 44。

255-251-247-243-239-235-231-227-223-219-215-

元字符串生成器

本文附带的代码是一个小型 GUI 实用程序,用于生成元字符串并将其放在剪贴板上,以便您可以将其粘贴到其他应用程序中。 内部代码对长度没有明确的限制,但“长度”文本框只接受七个字符,因此最大长度为 9999999(即 10,000,000 - 1)。 这对于大多数应用程序来说应该足够了。

生成最大长度 (9999999) 字符串只需几秒钟。 但是,由于某种原因,将其粘贴到记事本中需要很长时间。 至少,记事本会接受整个字符串。 Notepad++ 在 65,564 处截断。 如果您尝试将光标定位到 65,536 之后,它也会出现问题。 也许 Notepad++ 开发人员应该使用元字符串进行一些测试。

历史

  • 2007 年 9 月 8 日:首次发布
  • 2008 年 8 月 6 日:文章已更新
© . All rights reserved.