猿问

在 go 中测试非返回方法

我有一个简单的方法,它只检查参数是否为空,然后根据结构字段调用两种方法之一。

我将如何测试它?


func (cT *customType) someMethod(message string) {

    if message == ""{

        return

    }


    if cT.value == nil {

        cT.doFunctionOne()

    } else {

        cT.doFunctionTwo()

    }

}

在 Javascript 中,我会创建一个间谍doFunctionOne()并模拟对象。

模拟也Go很有效,但我将如何做“间谍”部分?

或者是否有另一种惯用的方法来测试这种方法?


慕森卡
浏览 203回答 3
3回答

ibeautiful

第一:您不会将方法命名为“doFunctionOne”而是“methodOne”:-)如果 doFunctionOne 和 doFunctionTwo 都没有任何可观察到的效果,那么测试它绝对没有意义。所以我们可以假设它们确实有可观察到的副作用,无论是对环境还是对它们被调用的 customType。现在只需测试这些副作用。如果两种方法都返回,这是微不足道的。如果它们无限循环,它会变得更难,但仍然可行。恕我直言,没有必要从“根据值测试它是调用一还是二”的意义上来“测试”这种方法:对我来说,这是低级的,过多地增加覆盖率是徒劳的。如果你调用某个方法,它必须做一些事情(可观察到的效果),你应该检查这个效果,而不是内部工作原理。

慕的地8271018

您可以在每个函数调用之前添加日志。注入您自己的记录器实现,例如 []string。检查字符串切片是否有匹配的字符串。但是,如果您正在创建函数工厂,最好将函数返回给调用者并且调用者将运行该函数。然后测试很简单。其次,只有两种函数,流函数和逻辑函数。您在同一个函数中混合了流和逻辑。测试困难只是这种不良做法的一个症状。
随时随地看视频慕课网APP

相关分类

Go
我要回答