play interface

This commit is contained in:
Bruce 2018-09-26 23:48:20 +08:00
parent d6a1cbd47f
commit 07a98a6dd4
No known key found for this signature in database
GPG Key ID: C715526B381CAF28
3 changed files with 92 additions and 0 deletions

View File

@ -0,0 +1,15 @@
// Code generated by mockery v1.0.0. DO NOT EDIT.
package mocks
import mock "github.com/stretchr/testify/mock"
// Robot is an autogenerated mock type for the Robot type
type Robot struct {
mock.Mock
}
// SayHi provides a mock function with given fields:
func (_m *Robot) SayHi() {
_m.Called()
}

View File

@ -0,0 +1,45 @@
package mocklib
import "fmt"
// Robot
type Robot interface {
SayHi()
}
// ServiceRobot is kind of Robot can offer services
type ServiceRobot struct {
}
func (robot *ServiceRobot) SayHi() {
fmt.Println("Hi, I'm service robot")
}
// IndustrialRobot is kind of Robot can do some jobs
type IndustrialRobot struct {
}
func (robot *IndustrialRobot) SayHi() {
fmt.Println("Hi, I'm industrial robot")
}
func StartRobots() {
robots := initializeRobots()
makeRobotsSayHi(robots)
}
// initialize all robots
func initializeRobots() []Robot {
robots := []Robot{
&ServiceRobot{},
&IndustrialRobot{},
}
return robots
}
// makeRobotsSayHi is used for making robots say hi
func makeRobotsSayHi(robots []Robot) {
for _, robot := range robots {
robot.SayHi()
}
}

View File

@ -0,0 +1,32 @@
package mocklib
import (
"github.com/weichou1229/go-patterns/playground/mocklib/mocks"
"testing"
)
func TestStartRobots(t *testing.T) {
StartRobots()
}
func TestMakeRobotsSayHi(t *testing.T) {
// create an instance of our test object
mockRobotA := new(mocks.Robot)
mockRobotB := new(mocks.Robot)
// setup expectations
mockRobotA.On("SayHi").Return(nil, nil)
mockRobotB.On("SayHi").Return(nil, nil)
robots := []Robot{
mockRobotA,
mockRobotB,
}
// Act
makeRobotsSayHi(robots)
// Assert that the expectations were met
mockRobotA.AssertExpectations(t)
mockRobotB.AssertExpectations(t)
}