我想知道在使用外部系统(例如数据库)时是否存在接受/惯用的方法来测试意外行为。这些通常是“ if err!= nil {...}”中的情况,通常情况下通常不会发生错误,并且您无法通过输入来控制错误。
一种“正确”的方法可能是定义一个接口和一个模拟结构,当需要时会返回错误。但是,如果我已经有大量无法与接口一起使用的代码,那么仅出于测试几个场景的目的而引入它们似乎很烦人。
那么有人知道并使用不同的方法吗?例如,在动态语言(例如php和js)中,可以轻松地通过模拟库甚至手动覆盖函数/方法的行为,这在编写测试时非常有用。
答案 0 :(得分:4)
使用接口和自定义/模拟的实现来测试 是实现此目的的方法。如果您想测试大多数代码,那么现在就值得进行切换。如果您不想只测试大部分代码,那么即使打扰了测试又有什么意义呢?他们不会向您保证任何事情,相反,他们会给您“一切”都很好的虚假幻想。
如果您不想使用接口和模拟接口,另一种方法是模拟数据库服务器本身,但让我们面对现实,这将需要更多工作。
只需使用接口即可。重构永远不会太晚。从长远来看,这总是值得做的事情。
还请注意,您可以逐步进行此“切换”。只需创建一个包含要测试的代码使用的功能的接口即可。您无需“触摸”其余的代码。更改可测试代码以使用该接口,然后可以在测试中进行模拟。在Go中很容易。