我的网络应用程序有一个类,用于分析和操作存储在 URL 哈希中的数据,它看起来像
http://myapp.com/#!/location/hornsea/season/spring/facilities/+shop+swimming-airport/size/50
为了能够对各种排列进行单元测试,我将一些 URL 片段存储在一个对象中(例如
var fragments {
valid: ["/location/hornsea", "/season/winter","/size/50"],
invalid: ["location/hornsea", "/seasonwinter","/size/fifty"]
}
然后在运行测试之前,我动态构建所有可能的有效和无效 URL,然后循环遍历这些 URL,为每个 URL 添加测试。
当我运行 url 有效性测试时,这很好,因为我只是在 isValid() 方法中检查 true 或 false,但是当测试从 URL 获取参数时,我不知道如何为了解决这个问题 - 我必须将返回的值(例如{location:“hornsea”“})与预期值进行比较,但是由于要分析的字符串是在运行测试之前动态构造的,所以我没有预期值存储在任何地方。
现在,我不确定我的方法是否太过分了 - 我是否应该关心在所有可能的 url 结构上测试所有方法?我是否可以设置在很容易做到的情况下针对所有可能的 url 运行的测试,但在我需要对测试进行更精细的控制时针对更易于管理的子集运行,但仍然设法涵盖所有可能性。即我可以编写一个测试套件来进行测试
http://myapp.com/season/autumn
也足以涵盖如下示例。
http://myapp.com/location/dungeness/season/autumn
http://myapp.com/location/camberwell/seasonautumn
我如何确定我没有留下任何间隙?是否有解决此类问题的通用方法,或者它是否针对特定应用程序?
最佳答案
您可以使用 inverse function test 进行测试。您必须编写一个函数(编码),它是 URL 解析器的反函数。编码函数根据有效的输入值构造 URL。测试的形式如下:
input = {"location" : "hornsea", "season" : "winter", "size" : "50"}
assert input == parse(encode(input))
为了获得最佳覆盖范围,您可以使用 Quickcheck 实现之一来生成输入值。使用生成的值,您可以创建有效输入参数或随机播放参数的子集。
关于javascript - 对大批量动态生成的字符串进行单元测试的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251500/