单元测试从struct属性模拟接口

时间:2020-04-14 14:52:23

标签: go

我想从使用接口的结构中模拟一个属性,以便在函数到达该点时不会得到nil指针。

这是代码:

type Server struct{
    parser: Parser
}

type Parser interface{
    SetProvider(p *Provider)
}

func (s *Server) doSomething(){
    s.anotherAction()
    // ...
    // here it crashes because I haven't assigned anything to parser in serverMock
    s.parser.SetProvider(&Provider{
        name: "foo"
    })
}

这是测试代码:

var serverMock = &Server{
    parser:
}

// mock SetProvider
func (s *Server) SetProvider(p *Provider) {
    // some action
}


TestMyCustomTest(){
    res, err := serverMock.doSomething()
    expected := struct{
        hobby: "code",
    }
    assert.Equal(t, &expected, res)
}

如您所见,我尚未从parser:分配任何东西给var serverMock,因为我仍然不知道应该怎么做才能使其正常工作。我不能为该解析器字段分配一个模拟接口,因为它将告诉我原始服务器结构需要Parser接口而不是模拟接口,并且我认为我需要&Server的指针var serverMock = &Server因为它正在使用s.anotherAction()之类的其他动作。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的意图,则您想测试Server的{​​{1}}方法,这取决于doSomething方法。因此,您想要的不是创建模拟Parser.SetProvider的方法,而是创建满足Server接口的模拟结构并创建使用它的Parser实例。这是此类测试的示例:

Server