Требуется, но не вызывается - ошибка с Powermock при вызове статического метода из другого статического метода с параметром предиката - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь протестировать служебный класс, имеющий статические методы, большинство из которых статические, и возвращающий Optional. Многие другие объекты и параметры передаются в качестве параметров, которые я смоделировал с помощью Mockito. Я использую PowerMock для вызова статических методов. Проблема заключается в том, что когда я использую команду verify после фактического вызова метода, я хочу проверить, т.е. MyUtil.getJob (JobManager, "_TEST_dummy_JOBGROUP", Optional.of ("CWB-4"));

Это не вызов другого метода, который он должен вызывать. т.е.
JobUtil.testDummy () ;;

Ошибка на консоли, вставленная ниже

Я попробовал использовать предикат, а также дать реальный предикат, когда вы прокомментировали первую строку в моем тесте. Я пытался вызвать когда .. затем и комментировать, а также вызывать реальный метод. Но безуспешно. Просьба игнорировать любые опечатки в коде, поскольку я только что создал пустышку.

MyUtilTest.java

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyUtil.class)
public class MyUtilTest {
    @Mock
    JobManager JobManager;
    @Mock
    Job Job;
    @Mock
    JobMetadata JobMetadata;
    @Mock
    private Predicate<Map.Entry<Job, JobMetadata>> predicate;
    @InjectMocks
    MyUtil MyUtil = new MyUtil();
    private ArgumentCaptor<Job> JobArgument = ArgumentCaptor.forClass(Job.class);
@Test
    public void testGetJobGroupPredicate() {
        //Predicate<Map.Entry<Job, JobMetadata>> jobGroupMatcher = MyUtil.getJobGroupPredicate(jobMeta -> eq("TEST_dummy_JOBGROUP").startsWith(jobMeta));
        PowerMockito.mockStatic(MyUtil.class);
        when(MyUtil.getJobGroupPredicate(j->"_TEST_dummy_JOBGROUP".startsWith(j))).thenReturn(predicate);
when(JobUtil.testDummy()).thenReturn("called");
        try {
            MyUtil.getJob(JobManager, "_TEST_dummy_JOBGROUP", Optional.of("TEST-4"));
        }
        catch(Exception e){}
        PowerMockito.verifyStatic(MyUtil.class);
        MyUtil.testDummy();;

    }


MyUtil.java
public class MyUtil {
    public static Optional<Job> getJob(final JobManager jobManager,
                                                   final String jobGroup,
                                                   Optional<String> feature) throws PlatformClientException {`
String test=MyUtil.testDummy();
        Predicate<Map.Entry<Job, JobMetadata>> jobGroupMatcher = getJobGroupPredicate(jobMeta -> jobGroup.startsWith(
                jobMeta));
        return getWithPredicate(jobManager, jobGroupMatcher, feature);
    }
static String testDummy() {
     return "helloooooo";
 }
}   

Требуется, но не вызывается de.dummy.cloud.wh.jobs.utils.MyUtil.testDummy ();

Однако с этим mockde.dummy.cloud.wh.jobs.utils.MyUtil.getJob было ровно 1 взаимодействие Макет для JobManager, hashCode: 1871312485, "_TEST_dummy_JOBGROUP", Опция [TEST-4] ); , Требуется, но не вызывается de.dummy.cloud.wh.jobs.utils.MyUtil.testDummy ();

Однако с этим mockde.dummy.cloud.workbench.jobs.utils.MyUtil.getJob было ровно 1 взаимодействие Макет для JobManager, hashCode: 1871312485, "_TEST_dummy_JOBGROUP", Опция [TEST-4] );

1 Ответ

0 голосов
/ 07 июня 2019

Для Mockito, несмотря на то, что предикаты имеют одинаковую реализацию, они являются разными экземплярами, и он не может просто соответствовать им в вашем случае.

Вы можете попробовать использовать подстановочный знак и принять любой Predicate:

when(any(Predicate.class)).thenReturn(predicate);

Если этого недостаточно, вам, скорее всего, нужно использовать пользовательский ArgumentMatcher, где вы будете динамически проверять входящий предикат:

when(argThat(new MyPredicateMatcher())).thenReturn(predicate);
...