javascript - 对大批量动态生成的字符串进行单元测试的方法

标签 javascript unit-testing batch-processing

我的网络应用程序有一个类,用于分析和操作存储在 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/

相关文章:

Javascript/原型(prototype)范围混淆

javascript - jQuery 验证输入类型复选框值

java - UnitTest 辅助类(不是 Controller ,不是服务等)

c# - 确定基于批处理的软件应用程序的系统要求(硬件、处理器和内存)

Cassandra 抛出错误请求 : Batch with conditions cannot span multiple tables

javascript - 如何在长时间运行 Javascript 的情况下避免 Firefox 中的无响应脚本弹出窗口?

javascript - 如何使用组合框隐藏/显示表单

unit-testing - 使用自定义编解码器的 Groovy/Grails 单元测试错误

c# - 如何对使用线程的方法进行单元测试?

amazon-s3 - Lambda 函数和触发的 S3 事件