myinterface.go
type MyInterface interface {
fun1() string
fun2() int
fun3() bool
}
func Foo(mi MyInterface) string {
return mi.fun1()
}
myinterface_test.go
type MyInterfaceImplementation struct{}
func (mi MyInterfaceImplementation) fun1() string {
return "foobar"
}
func (mi MyInterfaceImplementation) fun2() int {
return int(100)
}
func (mi MyInterfaceImplementation) fun3() bool {
return false
}
func TestFoo(t *testing.T) {
mi := MyInterfaceImplementation{}
val := Foo(mi)
if val != "foobar" {
t.Errorf("Expected 'foobar', Got %s", mi.fun1())
}
}
При написании тестов для Foo
, необходимо ли выполнять пробную реализацию интерфейса MyInterface
(как это требует от нас реализации fun2
и fun3
, которые не используются в Foo
)?
Есть ли способ, которым мы можем написать тесты для Foo
, где нам просто нужно написать фиктивную реализацию fun1
, а не для fun2
и fun3
?
Кроме того, каков идеальный способ проверить такое использование интерфейсов в Go?