为了账号安全,请及时绑定邮箱和手机立即绑定

测试返回接口的函数

测试返回接口的函数

Go
qq_花开花谢_0 2023-06-19 17:14:17
我在为下面的案例编写测试时遇到了困难。我能够使用仅实现我自己使用的功能的模拟对象为“助手”编写测试。如何使用不模拟函数 C()、D() 的模拟对象为函数“new”编写测试代码?可能是另一个包写得不好,它不应该返回一个接口,而是返回实际的结构?package mainimport (    "fmt")func main() {    New()}func New() {    new(NewFromEnvironment)}type newTopology func()(Interface,error)// new is non-exposed simply used for testing purpose.func new(newTopology newTopology) {  t,_ :=  newTopology()  helper(t)}// I need to call only A and Btype topologyInterface interface {    A() string    B() string}func helper(topology topologyInterface) {    s1 := topology.A()    s2 := topology.B()    fmt.Println(s1 + "," + s2)}// Below are from other package named "topology".// I have no control to the code below.type Interface interface {    A() string    B() string    C() string    D() string    //... more}func NewFromEnvironment() (Interface, error) {    return P{}, nil}type P struct{}func (p P) A() string {    return "A"}func (p P) B() string {    return "B"}func (p P) C() string {    return "C"}func (p P) D() string {    return "D"}// more...
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

您可以尝试创建一个MockP嵌入P. ThenMockP继承了 的所有方法P,但您可以使用自己的模拟实现来隐藏A()和。B()这是一个例子:


package main


import (

    "fmt"

)


type Interface interface {

    A()

    B()

}


type P struct {

}


func (p P) A() {

    fmt.Println("A")

}



func (p P) B() {

    fmt.Println("B")

}


type MockP struct {

    P

}


// Shadow P's B() method

func (p MockP) B() {

    fmt.Println("Mock B")

}


func main() {

    var p Interface = MockP{}

    p.A()

    p.B()

}

输出:


A

Mock B


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信