main.goをテストするための単体テストとそれが呼び出す関数の内部に関数(DeviceRepo.Get())を2回出してから、別の戻り値を返すGet関数をモックしたいと思います2回目にGet関数をどうやって模倣するのか分かりません。Golang mocking関数が2回呼び出されました
main.go:
type DeviceInterface interface {}
type DeviceStruct struct{}
var DeviceRepo repositories.DeviceRepoInterface = &repositories.DeviceRepoStruct{}
func (d *DeviceStruct) CheckDevice(familyname string, name string, firmwareversion string) string {
deviceList, deviceListErr := DeviceRepo.Get(familyname, name, firmwareversion)
if deviceListErr != "" {
return "some error"
}
if len(deviceList) == 0 {
deviceList, _ := DeviceRepo.Get(familyname, name, "")
if len(deviceList) > 0 {
return "Invalid firmware version."
} else {
return "Unknown device."
}
}
return "Success"
}
main_test.go:
type MockGetDeviceList struct {
returnResult []resources.DeviceListDataReturn
returnError string
}
func (m *MockGetDeviceList) Get(familyName string, name string, firmwareVersion string) ([]resources.DeviceListDataReturn, string) {
return m.returnResult, m.returnError
}
func Test_CheckDevice_WrongFirmwareVersion(t *testing.T) {
Convey("Test_CheckDevice_WrongFirmwareVersion", t, func() {
familyNameMock := "A"
nameMock := "A"
firmwareVersionMock := "3"
mockReturnData := []resources.DeviceListDataReturn{}
mockReturnDataSecond := []resources.DeviceListDataReturn{
{
FamilyName: "f",
Name: "n",
FirmwareVersion: "1.0",
},
}
deviceModel := DeviceStruct{}
getDeviceList := DeviceRepo
defer func() { DeviceRepo = getDeviceList }()
DeviceRepo = &MockGetDeviceList{returnResult: mockReturnData}
getDeviceList = DeviceRepo
defer func() { DeviceRepo = getDeviceList }()
DeviceRepo = &MockGetDeviceList{returnResult: mockReturnDataSecond}
expectReturn := "Invalid firmware version."
actualResponse := deviceModel.CheckDevice(familyNameMock, nameMock, firmwareVersionMock)
Convey("Checking check-device wrong firmware version", func() {
So(actualResponse, ShouldEqual, expectReturn)
})
})
}
Iが初めてで取得関数戻り[] resources.DeviceListDataReturn {}を模擬した後、戻りたいです[] resources.DeviceListDataReturn { {FamilyNameで: "F"、 名称: "1.0"、 }、 : "n" は、 FirmwareVersion}第TIで私。
ありがとうございました@icza、私はそれを持っています。 – Disuan