当前位置: 首页 > 面试题库 >

如何在测试用例中模拟结构的方法调用

濮阳立果
2023-03-14
问题内容

这是该结构及其方法的示例代码

type A struct {}

func (a *A) perfom(string){
...
...
..
}

然后我想从invoke()驻留在包外部的函数中调用方法,示例代码

var s := A{}
func invoke(url string){
   out := s.perfom(url)
   ...
   ...
}

我想invoke通过模拟performA 的方法来编写该功能的测试用例。

在Java中,我们有mockito,jmock框架来存根方法调用。

有什么办法,我们可以在不引入interfaces源代码的情况下模拟struct的方法调用吗?


问题答案:

要模拟方法调用,您需要模拟您的结构。

对于您提供的代码示例,我建议创建一个Performer实现您的Perform调用的接口。您的实际结构和模拟结构都将实现此接口。

我也建议您将结构作为参数传递给invoke函数,而不要使用全局变量。

这是一个例子:

type Performer interface {
    perform()
}

type A struct {
}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct {
}

func (a *AMock) perform () {
    fmt.Println("mocked method")
}

func caller(p Performer) {
    p.perform()
}

在测试中,将模拟插入到您的invoke呼叫中。在您的真实代码中,将真实结构注入您的invoke调用中。

使用https://godoc.org/github.com/stretchr/testify/mock之类的库,您甚至可以真正轻松地验证使用正确的参数,正确的次数调用您的方法,并控制模拟的行为。



 类似资料:
  • 我正在为公共方法创建一个使用JUnit的测试用例。这个方法调用同一个类中的一个私有方法,这个私有方法最终调用单独类中其他方法的序列,就像业务逻辑一样。所有方法都返回一个并发HashMap,我只想测试返回值上的。 我如何避免方法调用的级联? 如果我去嘲笑流的所有方法,那么我的测试案例就会变得巨大。我怎样才能避免这些调用,只对我的方法执行黑盒测试,即传递参数和理论收益。 我的方法是: 它从此类调用的私

  • 我有一个测试,如下所示,在给定条件下,我想确保。 然而,它错误地指出 错误出现在行 应为不是模拟对象。如何测试为非模拟对象调用的方法? 我在如何验证一个非模拟对象的方法中看到了答案?,但这仍然是使用模拟和间谍。我希望找到一种不需要嘲笑我已经拥有的类实例的方法。 (注:以上内容以科特林书写)

  • 下面是我要为其创建测试的类和方法: 具体地说,我希望模拟getAnalytics.getAll(),这样它就会返回一个我已经定义的字符串。而不是方法执行它的任务。这是我的代码:

  • 我有一些遗留代码,并对我在该代码上所做的增强进行了编写测试。我有一个类SiteSession,并提取了一个接口ISiteSession,以便将依赖项注入到调用类中。 调用类有一个构造函数,在该构造函数中,依赖项被注入到正在测试的控制器CustomerDetails中 现在,我的测试方法已经嘲弄了依赖关系,并且我对为这个控制器或代码的任何其他部分创建的任何测试都没有问题。但是,当调用该控制器上的测试

  • 我有一个jUnit测试,测试我的一个函数。在这个函数中,我调用了另一个类的方法,我想用mockito模拟这个方法。然而,我似乎不能实际嘲笑这一点。下面是我的jUnit测试的样子: 编辑:在我的MainClassImTesting()中。我正在调用的test()函数,它调用authenticateUser()并向它传递一个hashMap。

  • 我有一个这样的类 我怎样才能使用EasyMock来模拟我的其他方法()的调用? 背景: 最初,我将myOtherMethod编写为静态方法。为了进行测试,由于我无法模拟静态方法调用,我最终编写了一个调用静态方法的实例方法 我尝试用PowerMock模拟代码的静态方法versin,但在使用JSR-303 bean验证器时出现了一些错误(请参见此处),而且我也没有找到任何将PowerMockRunne