【发布时间】:2017-09-16 04:24:24
【问题描述】:
我正在使用第三方库,它是一些 C 函数的包装器。不幸的是,几乎所有的 Go 函数都是免费的(它们没有接收器,它们不是方法);不是我会采用的设计方法,但它就是我所拥有的。
仅使用 Go 的标准“测试”库:
有没有一种解决方案可以让我创建可以模拟函数的测试?
或者是将库包装成结构和接口,然后模拟接口以实现我的目标的解决方案?
我创建了一个蒙特卡罗模拟,它也处理生成的数据集。我的评估算法之一寻找特定模型,然后将其传递给第三方函数进行评估。我知道我的边缘情况并且知道调用计数应该是什么,这就是我想要测试的。
也许只需要一个简单的计数器?
我发现的使用这个库的其他项目没有完全覆盖或根本没有测试。
【问题讨论】:
-
什么是“免费”功能?
-
没有 Go 接收器的函数。它们与结构无关。
-
所以,你的意思是“函数”,因为任何带有接收器的东西都会被认为是一种方法。函数在大多数惯用的 go 中被广泛使用,并且没有什么可以阻止它们进行单元测试。你到底想模拟什么? Go 通常不会走某些语言使用的“模拟一切”的道路,这通常最终只是测试模拟而不是任何有用的东西。
-
测试函数的典型方法是传递输入,然后将输出与您期望的进行比较。是否需要模拟取决于输入和输出——而不是它是函数还是方法。如果您可以提供一些您正在尝试测试的示例,则可能会有更好的答案。否则,唯一的选择就是猜测。
标签: function unit-testing go