go - 你如何在 GoLang 的模拟中模拟错误返回值?
问题描述
我正在使用https://github.com/vektra/mockery来生成我的模拟文件。
假设我有这个功能测试GetQualifyingListOfBooks
。(模拟的)客户端方法的签名GetListOfBooks
是:
func GetListOfBooks(ctx context.Context, in *GetListOfBooksRequest, opts ...grpc.CallOption) (*GetListOfBooksResponse, error)
目标:我想模拟GetListOfBooks
返回错误的情况,所以我写了以下内容:
package whatever
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
mock "github.com/stretchr/testify/mock"
mockClients "github.com/MyOrg/MyApp/internal/app/myservice/mocks"
)
func TestGetQualifyingListOfBooks (t *testing.T) {
client := &mockClients.BookClient{}
client.On("GetListOfBooks", mock.Anything, mock.Anything).Return(nil, mock.AnythingOfType("error"))
realInstance.bookClient = client
b, err := GetQualifyingListOfBooks(realInstance, 10) // this calls `GetListOfBooks`
assert.Nil(t, b)
assert.NotNil(t, err)
}
但它对此感到恐慌:
--- FAIL: TestGetQualifyingListOfBooks (0.00s)
panic: assert: arguments: Error(1) failed because object wasn't correct type: Error(1) [recovered]
panic: assert: arguments: Error(1) failed because object wasn't correct type: Error(1)
你如何模拟错误的返回值?
解决方案
更改此行
client.On("GetListOfBooks", mock.Anything, mock.Anything).Return(nil, mock.AnythingOfType("error"))
对此
client.On("GetListOfBooks", mock.Anything, mock.Anything).Return(nil, errors.New("hello world"))
为我做的。
推荐阅读
- python - 在python3中打印每两个字母对
- python - 将python列表传递给json
- java - 当内存损坏时,Java 中的相同引用/实例变量会发生什么?
- nest-device-access - 新设备访问 API 似乎非常有限
- spring-boot - Spring Data ObjectOptimisticLockingFailureException:批量更新从更新[0]返回了意外的行数;实际行数:0;预期:1
- android - 发布 APK 未按预期工作,它使我的设备颤抖
- python - pd.cut 非均匀 bin 间隔
- graph-theory - 给定边和顶点,如何将它们分成连接的组件?
- typescript - 在类实例上测试私有属性 [TypeScript]
- ajax - 如何检查 shibboleth SSO 会话在 ajax 调用中是否过期?