json - 如何为 json.Marshal 的失败案例编写单元测试?

标签 json unit-testing go

我有以下代码:

func policyDocumentToStr(doc map[string]interface{}) (*string, error) {
   policy, err := json.Marshal(doc)
   if err != nil {
     log.Debugf("Error converting policy document to string. Error %s", err)
     return nil, err
   }

   policyAsString := string(policy)
   return &policyAsString, nil
}

我想编写一个单元测试来涵盖 json.Marshal(doc) 返回错误的情况。有人可以建议我如何产生错误吗?什么样的函数输入会导致 policy, err := json.Marshal(doc) 行错误?

最佳答案

为其提供一个无法用 JSON 表示的值。有很多方法可以做到这一点,包括创建一个带有始终返回错误的自定义编码(marshal)拆收器的类型。但最简单的方法之一是尝试编码 channel :

x := map[string]interface{}{
    "foo": make(chan int),
}
_, err := json.Marshal(x)
fmt.Printf("Marshal error: %s\n", err)

Playground link

关于json - 如何为 json.Marshal 的失败案例编写单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48898542/

相关文章:

go - 如何动态创建一个少一个属性的结构体?

arrays - 从字节 slice 中提取位到一个 int slice 中

python - Python 中的 JSON 字符串验证

javascript - 将 JSON 对象映射到单独的 div 中

java - 如何在 Android JUnit 测试中测试文本框的值

javascript - 我如何使用具有异步/等待功能的守夜人?

unit-testing - Bash:在文件保存时执行脚本?

go - 如何将以毫秒为单位的字符串时间(hh :mm:ss. xxx)转换为time.Time?

javascript - 带有 JSON 数据的 D3 线,未渲染

json - 嵌套 Json 提取中间键未知的值