使用Mockito验证多种方法的顺序



我有一个具有两个值,年龄和名称的班级人员,我正在使用Mockito进行学习进行一些测试。

我的测试方法看起来像:

        @Test()
        public void testFive(){
            Person mockedPerson = Mockito.mock(Person.class);
            Mockito.when(mockedPerson.getAge()).thenReturn(1,2,3);
            Mockito.when(mockedPerson.getName()).thenReturn("1","2","3");
            InOrder inOrder = Mockito.inOrder(mockedPerson);
            mockedPerson.getAge();
            mockedPerson.getAge();
            mockedPerson.getAge();
            mockedPerson.getName();
            mockedPerson.getName();
            mockedPerson.getName();
            inOrder.verify(mockedPerson).getAge();
            inOrder.verify(mockedPerson).getAge();
            inOrder.verify(mockedPerson).getAge();
            inOrder.verify(mockedPerson).getName();
            inOrder.verify(mockedPerson).getName();
            inOrder.verify(mockedPerson).getName();
        }

我需要测试getage((方法被称为三次,然后是三个呼叫getName((方法。

我得到了这个例外:

org.mockito.exceptions.verification.verificationinorderfailure: 按顺序验证失败:person.getage((;想要1次:

您的验证应该是这样的:

        inOrder.verify(mockedPerson, times(3)).getAge();
        inOrder.verify(mockedPerson, times(3)).getName();

如果您在测试中有更多电话,则应该是这样:

    @Test
    public void testFive(){
        Person mockedPerson = Mockito.mock(Person.class);
        Mockito.when(mockedPerson.getAge()).thenReturn(1,2,3,4);
        Mockito.when(mockedPerson.getName()).thenReturn("1","2","3");
        InOrder inOrder = Mockito.inOrder(mockedPerson);
        mockedPerson.getAge();
        mockedPerson.getAge();
        mockedPerson.getAge();
        mockedPerson.getName();
        mockedPerson.getName();
        mockedPerson.getName();
        mockedPerson.getAge();

        inOrder.verify(mockedPerson, times(3)).getAge();
        inOrder.verify(mockedPerson, times(3)).getName();
        inOrder.verify(mockedPerson, times(1)).getAge();
    }

发生的事情是呼叫验证没有第二个参数验证1个调用(好像您写了times(1)(,并且由于您打电话给3次,它会失败。

这就是为什么我喜欢始终添加 times(x),它使事情显式。

相关内容

  • 没有找到相关文章

最新更新