我正在寻找断言我的测试中涵盖了某个语句。例如,假设从测试中调用 methodA(),它引用了 methodB()。
我想断言 methodB() 在测试中执行 methodA() 时被调用。
在下面的代码中,如何在 Go 测试中断言在执行 svc.OnStartup() 时调用 svc.AddCheck()?
func (svc *Servjice) OnStartup() error {
if err := svc.AddCheck("cache"); err != nil {
return err
}
return nil
}
是否可以像 Java Mockito 一样断言 Go 中通过监视来调用真正的方法?
一句话:不。
但是替代方案呢?
您应该测试的是您的函数的效果。这在任何语言中都是如此,而不仅仅是 Go。无论您正在进行单元测试还是某些更高级别类型的测试(包括端到端测试),这也是如此。
如果您的
methodB()
调用 methodA()
,则检查 本身 是否被调用是没有用的。 有用的是检查methodA()
是否符合您的预期。 无论它是否使用 methodB()
来实现这一点,根据定义,您的测试都不应该关心实现细节。一些例子:
methodA()
向数据库中插入一些内容。不要断言
methodA()
被调用,而是断言您期望的行现在位于数据库中。
methodA()
,断言它是否返回正确的值。
methodA()
、
methodA()
、REST API 还是使用 Jedi 力量来实现这一点,都无关紧要。所以 TL;DR;不,你不能做你所要求的事情,但这没关系,因为你不应该做你所要求的事情。有更好的选择(甚至在 Java 中)。
不,一点也不。