-1

我正在寻找断言我的测试中涵盖了一个语句。例如,假设从测试中调用引用了 methodB() 的 methodA()。

我想断言在从测试中执行 methodA() 时会调用 methodB() 。

在下面的代码中,我如何在 Go 测试中断言 svc.AddCheck() 在执行 svc.OnStartup() 时被调用?

func (svc *Servjice) OnStartup() error {
    if err := svc.AddCheck("cache"); err != nil {
        return err
    }
    return nil
}
4

2 回答 2

4

是否可以断言通过像 Java Mockito 一样在 Go 中进行间谍活动调用了一个真正的方法?

一句话:没有。

但是替代品呢?

您应该测试的是您的功能的效果。在任何语言中都是如此,而不仅仅是 Go。无论您是在进行单元测试还是一些更高级别的测试,包括端到端测试,这也是如此。

如果您的methodB()电话methodA(),检查本身是没有用的,methodA()被调用。有用的是检查是否符合您的methodB()期望。无论它是否用于methodA()实现这一点,根据定义,您的测试都不应该关心的实现细节。

一些例子:

  • 假设您正在编写一个集成测试,并将某些内容methodA()插入到数据库中。不要断言methodA()被调用——而是断言您期望的行现在在数据库中。

  • 假设您正在为 Fibonacci 生成器编写单元测试。不要断言它是否调用methodA(),断言它是否返回正确的值。

当您断言调用了子方法时,您会担心实现细节——函数的“方式”。这不是好的测试所做的。良好的测试可确保您的方法产生正确的结果。从测试的角度来看,它是通过调用methodA()methodZ()、 REST API 还是使用绝地力量来做到这一点都无关紧要。

所以 TL;DR; 不,你不能按照你的要求去做,但这没关系,因为你不应该按照你的要求去做。有更好的选择(即使在 Java 中)。

于 2019-09-03T10:19:14.377 回答
2

是否可以断言通过像 Java Mockito 这样的 golang 中的间谍活动调用了一个真正的方法?

一点都不。

于 2019-09-03T07:34:18.530 回答