对 JSON 格式化程序进行单元测试?
Unit testing a JSON formatter?
我正在构建一个库,它接收 JSON 字符串并根据用户选择的模板和规范对其进行格式化。
我最近开始为这个库编写单元测试,发现在某些情况下创建我可以断言的数据需要大量代码,而且在大多数情况下会使测试难以阅读。
作为包的作用的例子:
输入json:
{
"id": 1,
"name": "abc",
"barId": 5
}
输出json:
{
"href": "/foo/1",
"name": "abc",
"_children": [
"bar": {
"href": "/bar/5"
}
]
}
因此,根据用户配置,已解析的 json 可能会被深度嵌套。
现在我已经构建了一个使用 Newtonsoft.Json 生成 objects 断言的生成器,但所有这些工作让我思考是否有更好的方法来做到这一点.
我需要做的一些测试例如:
- 检查返回的 json 是否包含“_children”,而它应该
- 如果 href 为空、null 或根本不存在
- 如果属性传递正确
- 如果 children 的属性已正确传递
- 基于配置的所有变化。
所以,回到问题是否有一些干净的方法来执行这种断言?除了手动构建之外,是否有更快的方法来构建预期的 json?
对我而言,您创建的不是“fomatter”,而是“JSON 生成器”,因为不只是更改空格、制表符、括号等,而是从输入中生成新内容。
所有测试都是关于“这个输入的预期输出是什么”
因此,创建足够的输入文件来涵盖所有 rules/scenarios 和相关的预期输出文件。
然后随心所欲XUnit/Nunit任你选择。
string input = loadJson("sample1.json") ;
string expected = loadJson("sample1_expected.json") ;
string generated = generateJson(input) ;
if(compareJsonFiles(generated,expected)== 0)
// files are equal
else
// something went wrong
我的代码很笼统,因为你的问题是概念性的,你没有提供任何代码。
loadJson
是否涉及解析,这取决于您的生成器是如何实现的 - How can I parse JSON with C#?
compareJsonFiles
你可以查看这些答案
Find and return JSON differences using newtonsoft in C#?
我正在构建一个库,它接收 JSON 字符串并根据用户选择的模板和规范对其进行格式化。
我最近开始为这个库编写单元测试,发现在某些情况下创建我可以断言的数据需要大量代码,而且在大多数情况下会使测试难以阅读。
作为包的作用的例子:
输入json:
{
"id": 1,
"name": "abc",
"barId": 5
}
输出json:
{
"href": "/foo/1",
"name": "abc",
"_children": [
"bar": {
"href": "/bar/5"
}
]
}
因此,根据用户配置,已解析的 json 可能会被深度嵌套。
现在我已经构建了一个使用 Newtonsoft.Json 生成 objects 断言的生成器,但所有这些工作让我思考是否有更好的方法来做到这一点.
我需要做的一些测试例如:
- 检查返回的 json 是否包含“_children”,而它应该
- 如果 href 为空、null 或根本不存在
- 如果属性传递正确
- 如果 children 的属性已正确传递
- 基于配置的所有变化。
所以,回到问题是否有一些干净的方法来执行这种断言?除了手动构建之外,是否有更快的方法来构建预期的 json?
对我而言,您创建的不是“fomatter”,而是“JSON 生成器”,因为不只是更改空格、制表符、括号等,而是从输入中生成新内容。
所有测试都是关于“这个输入的预期输出是什么”
因此,创建足够的输入文件来涵盖所有 rules/scenarios 和相关的预期输出文件。
然后随心所欲XUnit/Nunit任你选择。
string input = loadJson("sample1.json") ;
string expected = loadJson("sample1_expected.json") ;
string generated = generateJson(input) ;
if(compareJsonFiles(generated,expected)== 0)
// files are equal
else
// something went wrong
我的代码很笼统,因为你的问题是概念性的,你没有提供任何代码。
loadJson
是否涉及解析,这取决于您的生成器是如何实现的 - How can I parse JSON with C#?
compareJsonFiles
你可以查看这些答案
Find and return JSON differences using newtonsoft in C#?