猿问

有没有办法在多次调用函数时每次调用 AssertCalled

我正在尝试使用stretchr/testify对如下代码进行单元测试:


func (c *MyClient) upsertData(data MyObject) {

    upsertToDatabase(data)

}


func doSomething(c *MyClient) {

    data1, data2 := getSomeData()

    c.upsertToDatabase(data1)

    c.upsertToDatabase(data2)

}


// Unit test.

func TestDoSomething(t *testing.T) {

    c := mock.MyClient{}

    doSomething(c)

    /* The following line checking for data1 upsert failed.

     * require.True(t, c.AssertCalled(t, "upsertToDatabase", mock.MatchedBy(func(data MyObject) bool { return data == MyObject{expectedObject1 /* data2 */}})) */

    require.True(t, c.AssertCalled(t, "upsertToDatabase", mock.MatchedBy(func(data MyObject) bool { return data == MyObject{expectedObject1 /* data2 */}}))

}

我想调用并AssertCalled验证两者确实是用预期的函数调用的。但是我只能在函数的最后一次调用中断言,即使用. 有什么方法或我可以用它来断言调用吗?data1data2data2data1


POPMUISE
浏览 130回答 1
1回答

慕无忌1623718

文档中的示例:/*  Actual test functions*/// TestSomething is an example of how to use our test object to// make assertions about some target code we are testing.func TestSomething(t *testing.T) {  // create an instance of our test object  testObj := new(MyMockedObject)  // setup expectations  testObj.On("DoSomething", 123).Return(true, nil)  // call the code we are testing  targetFuncThatDoesSomethingWithObj(testObj)  // assert that the expectations were met  testObj.AssertExpectations(t)}看起来您可以调用.On任意次数来记录任意数量的“以这种方式和这种方式调用”的期望。我只是阅读源代码,真的。打赌它会比在 SO 上发帖更快。
随时随地看视频慕课网APP

相关分类

Go
我要回答