我想从使用接口的结构中模拟一个属性,以便在函数到达该点时不会得到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()
之类的其他动作。
答案 0 :(得分:0)
如果我正确理解了您的意图,则您想测试Server
的{{1}}方法,这取决于doSomething
方法。因此,您想要的不是创建模拟Parser.SetProvider
的方法,而是创建满足Server
接口的模拟结构并创建使用它的Parser
实例。这是此类测试的示例:
Server