Я хочу смоделировать свойство из структуры, которая использует интерфейс, поэтому я не получаю нулевой указатель, когда функция достигает этой точки.
Это код:
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
, потому что я до сих пор не знаю, что мне делать, чтобы это работало , Я не могу назначить mockInterface для этого поля синтаксического анализатора, потому что он скажет мне, что исходная структура сервера требует интерфейс Parser
, а не фиктивный, и я думаю, что мне нужен указатель &Server
для var serverMock = &Server
, потому что он использует другие действия, такие как s.anotherAction()
.