Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 行为错误的模拟函数仍然通过_Go_Testing - Fatal编程技术网

Go 行为错误的模拟函数仍然通过

Go 行为错误的模拟函数仍然通过,go,testing,Go,Testing,我正在为依赖于其他函数的函数编写测试。我使用Gomock库来模拟这些依赖项的行为,这是其中之一: &mock.UseCaseToDependOn{ UpdateStatusFuncMock: func(ID data.ID) ([]*ObjectsToReturn, error) { return case.in.updateStatusFuncReturnsObjects, case.in.updateStatusFuncReturnsError },

我正在为依赖于其他函数的函数编写测试。我使用
Gomock
库来模拟这些依赖项的行为,这是其中之一:

&mock.UseCaseToDependOn{
    UpdateStatusFuncMock: func(ID data.ID) ([]*ObjectsToReturn, error) {
        return case.in.updateStatusFuncReturnsObjects, case.in.updateStatusFuncReturnsError
    },
},
然而,在代码检查中,我意识到使用状态机模式的
UpdateStatusFuncMock
mock函数返回的是基于输入的不合逻辑的数据,但是,测试仍然顺利通过

这对我来说真的很奇怪,因为我认为在这种情况下测试应该失败

另一方面,如果我提供的数据仅符合逻辑,那么:

  • 首先,我需要了解测试所依赖的函数的内部行为。这是好事还是坏事
  • 其次,我认为这样做只会产生误报,因为测试仍然通过了错误行为的模拟函数

使用输入和输出必须遵守现有逻辑的模拟函数是否好?

首先,区分白盒测试和黑盒测试很重要。

根据你要做的是哪一个,遵循最好的方法,正如前面的评论所说,它是干净的,而且通常最好使用赝品或存根


您可以创建一组测试,其中存根返回错误,另一个测试具有预期的输出。

“使用[whatever]创建模拟函数是否合适”。不是。IMHO模拟是一种非常糟糕的测试实践(除了一些非常特殊的情况)。正如您所指出的,模拟通常倾向于测试内部实现细节。有些语言如果没有模仿就无法进行测试,但我认为使用存根或赝品是很容易的,而且会导致更干净更好的测试。