go - 具有错误行为的模拟功能仍然通过
问题描述
我正在为依赖于其他函数的函数编写测试。我使用Gomock
库来模拟这些依赖项的行为,这是其中之一:
&mock.UseCaseToDependOn{
UpdateStatusFuncMock: func(ID data.ID) ([]*ObjectsToReturn, error) {
return case.in.updateStatusFuncReturnsObjects, case.in.updateStatusFuncReturnsError
},
},
但是,在代码审查中,我意识到UpdateStatusFuncMock
使用状态机模式的模拟函数正在根据输入返回不合逻辑的数据,但是,测试仍然很好地通过了。
这对我来说真的很奇怪,因为我相信在这种情况下测试应该失败。
另一方面,如果我提供的数据只是遵循逻辑,那么:
- 首先,我需要了解我的测试所依赖的函数的内部行为。这是好事还是坏事?
- 其次,我认为这样做只会产生误报,因为测试仍然通过了具有错误行为的模拟功能。
创建输入输出必须遵守现有逻辑的模拟函数好不好?
解决方案
首先,区分白盒测试和黑盒测试很重要。 https://www.geeksforgeeks.org/differences-between-black-box-testing-vs-white-box-testing/
根据您要执行的操作,请遵循最佳方法,正如前面的评论所说,它是干净的,通常使用假货或存根更好。
您可以创建一组带有返回错误的存根测试和另一个带有预期输出的测试。
推荐阅读
- django - 如何使用 Django admin 使用 Celery 创建自定义任务
- github - 获取 GitHub GraphQL API 中的维护者列表?
- node.js - 使用 API (NodeJS) 时 POST 请求中的错误处理
- python - 在numpy数组中删除nan后如何减少数组形状?
- excel - ActiveCell 更改然后在另一个单元格更改中添加
- ffmpeg - ffmpeg hwaccel 没有剩下的解码器表面
- python - docker-compose 和连接到 Mongo 容器
- c++ - C++ 是否将 char 指针视为 c 样式字符串?
- python - 抓住某个字符串的第二行并将其附加到一个新列表中
- javascript - Puppeteer 在定义为变量时返回 undefined