猿问

如何使用反射实现或模拟Go接口?

我想用反射实现Go接口以生成模拟和存根。但是,如果我看一看反射包,我不知道该怎么做(也许是不可能的)。


例如:测试是否FUNC电话WriteHeader(404)上ResponseWriter:


type ResponseWriterMock struct {                              //

  status int                                                  //

}                                                             // How to replace

func (*ResponseWriterMock) Header() Header {}                 // this block with 

func (*ResponseWriterMock) Write([]byte) (i int, e error) {}  // a reflectivly 

func (m *ResponseWriterMock) WriteHeader(status int) {        // generated mock? 

  m.status = status                                           //  

}                                                             //

responseWriterMock := new(ResponseWriterMock)


funcToTest(responseWriterMock)


if responseWriterMock.status != 404 {

    // report error

}

使用RhinoMocks(C#),我会这样写:


var responseWriterMock = MockRepository.GenerateMock<ResponseWriter>();


funcToTest(responseWriterMock);


responseWriterMock.AssertWasCalled(rw => rw.WriteHeader(404));

如何使用反射实现Go接口?


回首忆惘然
浏览 203回答 2
2回答

素胚勾勒不出你

据我所知和有关问题的答案,不可能在运行时创建新类型。您可能想尝试应该支持在Universe中定义新类型的go-eval程序包。
随时随地看视频慕课网APP

相关分类

Go
我要回答