Golang 模拟上下文恐慌

所以我正在使用嘲弄和作证在golang中进行单元测试


测试代码如下:


const bufSize = 1024 * 1024


var lis *bufconn.Listener


var mockAccountService = &mocks.AccountService{}


func init() {

    lis = bufconn.Listen(bufSize)

    s := grpc.NewServer()

    RegisterAccountManagementHandlerServer(s, &server{mockAccountService})

    go func() {

        if err := s.Serve(lis); err != nil {

            log.Fatalf("Server exited with error: %v", err)

        }

    }()

}


func bufDialer(context.Context, string) (net.Conn, error) {

    return lis.Dial()

}


func TestSayHello(t *testing.T) {


    var a uint64 = 1


    ctx := context.Background()


    conn, err := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer), grpc.WithInsecure())

    if err != nil {

        t.Fatalf("Failed to dial bufnet: %v", err)

    }

    defer conn.Close()

    client := NewAccountManagementHandlerClient(conn)


    mockAccountService.On("GetSavingAccount", context.Background(), a, a, "Hello", 1).Return(&models.SavingAccount{

        CustomerID:      1,

        ID:              1,

        CardNo:          "Hello",

        SavingProductID: 1,

        Balance:         0,

        Status:          1,

    })


    resp, err := client.GetSavingAccount(ctx, &GetSavingAccountDataRequest{

        Id:              1,

        CustomerId:      1,

        CardNo:          "Hello",

        SavingProductId: 1,

    })


    if err != nil {

        t.Fatalf("SayHello failed: %v", err)

    }

    fmt.Printf("Response: %+v", resp)

    // Test for output here.


谢谢


素胚勾勒不出你
浏览 98回答 1
1回答

梦里花落0921

所以,你有方法:GetSavingAccount(*context.Context,uint64,uint64,string,int64)你嘲笑过:GetSavingAccount(*context.Context,uint64,uint64,string,int)你在最后一个参数上有区别,你的问题是int64和int,所以你需要:mockAccountService.On("GetSavingAccount", mock.Anything, a, a, "Hello", int64(1)).Return(...})对于上下文参数总是使用mock.Anything,它比模拟上下文更容易。小心 int/int64/int32 和其他类型,指针/结构参数也是如此。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go