Есть ли способ AssertCalled для каждого вызова, когда функция вызывается несколько раз - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь выполнить модульный тест с помощью 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 и проверить, что оба data1 и data2 действительно вызываются с ожидаемой функцией. Но я могу утверждать только с последним вызовом функции, то есть с data2. Есть ли способ или как я могу подтвердить звонок с помощью data1?

1 Ответ

1 голос
/ 18 июня 2020

Пример в документах :

/*
  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.

...