Тот же результат, полученный при использовании одного и того же метода в цикле с различными условиями - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь протестировать метод несколько раз с разными условиями.Условия зависят от значений, возвращаемых из методов, вызываемых внутри тестируемого метода.Однако я получаю один и тот же результат снова и снова.

@Test
    public void testMethod() {
        try {
            TestBn testBn = getTestBn();
            when(mockDatabase.getDBConnection()).thenReturn(conn);
            PowerMockito.doNothing().when(mockDatabase).closeDBConnection();

            List<String> accListForCurrentYear = new ArrayList<>();
            accListForCurrentYear.add("Test String 1");
            accListForCurrentYear.add("Test String 2");
            accListForCurrentYear.add("Test String 3");
            accListForCurrentYear.add("Test String 4");

            for (String accStr : accListForCurrentYear)
            {
                AccountTypeBn acctypeDto = new AccountTypeBn();
                acctypeDto.setAccountTypes(accStr);
                when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.anyString(),
                        Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Date.class),
                        Mockito.any(Date.class))).thenReturn(acctypeDto);

                UserDetailsBn usrDtlsBn = getCommonUserDetails();
                TestBn newTestBn =  mockClaimBO.validateInitialClaimDtls(usrDtlsBn, TestBn); //Method to be tested
                for (ResultBn resultBn : newTestBn.getAccbnList())
                {
                    System.out.println("Property1 : "+resultBn.getProperty1());
                    System.out.println("Property2 : "+resultBn.getProperty2());
                    System.out.println("Property3 : "+resultBn.getProperty3());
                    System.out.println("Property4 : "+resultBn.getProperty4());
                    System.out.println("-----------------------------------");
                }
            }

        } catch (Exception e) {
            fail("### testMethod ### Failed with following error: " + getStackTrace(e));
        }
    }

Я получаю один и тот же вывод (свойства сохраняются после первой итерации).

1 Ответ

0 голосов
/ 12 июня 2018

Я думаю, что ваша функция mockOnlineClaimDAO.getAccountType всегда возвращает один и тот же объект.

Лучшее решение - определить уникальный сопоставитель, используя eq для вашей mockOnlineClaimDAO.getAccountType функции, поскольку теперь вы используете только сопоставляющие символы.Пример:

when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.eq(accStr),...`

Другой вариант - использовать последовательную заглушку.Затем вам нужно добавить несколько thenReturn операторов:

when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Date.class), Mockito.any(Date.class)))
.thenReturn(new AccountTypeBn("Test String 1"))
.thenReturn(new AccountTypeBn("Test String 2"))
.thenReturn(new AccountTypeBn("Test String 3"))
.thenReturn(new AccountTypeBn("Test String 4"));

или, альтернативно, передать все возвращаемые значения в блоке 1 thenReturn:

when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Date.class), Mockito.any(Date.class)))
.thenReturn(new AccountTypeBn("Test String 1"), new AccountTypeBn("Test String 2"), new AccountTypeBn("Test String 3"));

При каждом вызове функции-заглушки,следующий объект будет возвращен.

...