ZhangZhihui's Blog  

 

复制代码
func TestLoginUserAPI(t *testing.T) {
    user, password := randomUser(t)

    testCases := []struct {
        name string
        body gin.H
        buildStubs func(store *mockdb.MockStore)
        checkResponse func(recorder *httptest.ResponseRecorder)
    } {
        {
            name: "OK",
            body: gin.H{
                "username": user.Username,
                "password": password,
            },
            buildStubs: func(store *mockdb.MockStore) {
                store.EXPECT().
                    GetUser(gomock.Any(), gomock.Eq(user.Username)).
                    Times(1).
                    Return(user, nil)
            },
            checkResponse: func(recorder *httptest.ResponseRecorder) {
                require.Equal(t, http.StatusOK, recorder.Code)
            },
        },
复制代码

This test case failed, because in the function loginUser that is tested there are two calls by the store:

......
user, err := server.store.GetUser(ctx, req.Username)
......
session, err := server.store.CreateSession(ctx, db.CreateSessionParams{
......

but there's only one store.EXPECT() in the test case. 

Add one for the other function call and the test case will pass:

复制代码
func TestLoginUserAPI(t *testing.T) {
    user, password := randomUser(t)

    testCases := []struct {
        name string
        body gin.H
        buildStubs func(store *mockdb.MockStore)
        checkResponse func(recorder *httptest.ResponseRecorder)
    } {
        {
            name: "OK",
            body: gin.H{
                "username": user.Username,
                "password": password,
            },
            buildStubs: func(store *mockdb.MockStore) {
                store.EXPECT().
                    GetUser(gomock.Any(), gomock.Eq(user.Username)).
                    Times(1).
                    Return(user, nil)
                store.EXPECT().
                    CreateSession(gomock.Any(), gomock.Any()).
                    Times(1)
            },
            checkResponse: func(recorder *httptest.ResponseRecorder) {
                require.Equal(t, http.StatusOK, recorder.Code)
            },
        },
复制代码

 

posted on   ZhangZhihuiAAA  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
 
点击右上角即可分享
微信分享提示