1 回答
TA贡献1802条经验 获得超4个赞
我看到三种简单的方法来解决这个问题:
1- 更改 Call 方法的签名以接收指向 MockSimple 的指针,并在实例化 Simple 结构时,为其提供 mock 的地址:
func (ms *MockSimple) Call() {
ms.hasBeenCalled = true
}
func TestMockCalled(t *testing.T) {
ms := MockSimple{}
s := Simple{
simpleInterface: &ms,
}
s.CallInterface()
if ms.hasBeenCalled != true {
t.Error("Interface has not been called")
}
}
2-不是最干净的解决方案,但仍然有效。如果您真的不能使用#1,请使用它。在其他地方声明“hasBeenCalled”并更改您的 MockSimple 以保存指向它的指针:
type MockSimple struct {
hasBeenCalled *bool
}
func (ms MockSimple) Call() {
*ms.hasBeenCalled = true
}
func TestMockCalled(t *testing.T) {
hasBeenCalled := false
ms := MockSimple{&hasBeenCalled}
s := Simple{
simpleInterface: ms,
}
s.CallInterface()
if hasBeenCalled != true {
t.Error("Interface has not been called")
}
}
3- 可能是一个非常糟糕的解决方案:使用全局变量,所以我只会将其用作最后的手段(始终避免全局状态)。使“hasBeenCalled”成为全局变量并从方法中对其进行修改。
var hasBeenCalled bool
type MockSimple struct{}
func (ms MockSimple) Call() {
hasBeenCalled = true
}
func TestMockCalled(t *testing.T) {
ms := MockSimple{}
s := Simple{
simpleInterface: ms,
}
s.CallInterface()
if hasBeenCalled != true {
t.Error("Interface has not been called")
}
}
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报