Как я могу заставить Powermock работать с Java11? - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть сервисный проект, написанный на Java11.Он использует тесты junit для полного покрытия кода.Я написал метод планировщика для updateFiles (вызывается Files.walkFileTree) в классе FileReceivingStateMarkerService.Я хочу проверить статический вызов Files.walkFileTree из тестового класса, написанного для FileReceivingStateMarkerService.Мне нужно использовать PowerMockRunner для проверки статического вызова, поскольку он не может быть проверен простым MockitoJunitRunner.

При выполнении теста я получаю NPE в методе setUp в строке - mockStatic(Files.class);

Не могли бы вы, пожалуйстапомогите мне решить вопрос о том, как настроить powermock с Java11 и инициализировать статический класс?

Я настроил powermock в сервисном проекте (в Java11), как показано ниже

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.0-RC.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.0-RC.1</version>
    <scope>test</scope>
</dependency>

FileReceivingStateMarkerService class

class FileReceivingStateMarkerService {
    private static final Logger LOG = LoggerFactory.getLogger(FileReceivingStateMarkerService.class);

    private final FileProcessingActivityRepositoryService fileProcessingActivityRepositoryService;
    private final FilePollActivityRepository filePollActivityRepository;
    private final FileProcessingRequestRepositoryService fileProcessingRequestRepositoryService;

    @Autowired
    FileReceivingStateMarkerService(FileProcessingActivityRepositoryService fileProcessingActivityRepositoryService, FilePollActivityRepository filePollActivityRepository,
                                           FileProcessingRequestRepositoryService fileProcessingRequestRepositoryService) {
        this.fileProcessingActivityRepositoryService = fileProcessingActivityRepositoryService;
        this.filePollActivityRepository = filePollActivityRepository;
        this.fileProcessingRequestRepositoryService = fileProcessingRequestRepositoryService;
    }

    @Scheduled(fixedDelayString="#{${fileprocess.filemonitor.interval.minutes}*60*1000}")
    void updateFiles() {
        List<FileProcessingRequest> requests = fileProcessingRequestRepositoryService.getFileProcessingRequests();
        LOG.debug("Running file receiving state");
        requests.forEach(request -> {
            LOG.debug("Looking at location {}", request.getFileLocation());
            final var fileVisitor = new FileReceivingStateMarkerFileVisitor(filePollActivityRepository
                                                                          , fileProcessingActivityRepositoryService
                                                                          , request);
            try {
                Files.walkFileTree(Path.of(request.getFileLocation()), Collections.emptySet(), 1, fileVisitor);
            } catch(Exception e) {
                LOG.debug(e.getMessage());
            }
        });
    }
}

Тестовый класс для FileReceivingStateMarkerService

package com.experianhealth.rfp.scheduler;

import com.experianhealth.rfp.core.DocumentType;
import com.experianhealth.rfp.core.FileProcessingRequest;
import com.experianhealth.rfp.dao.FilePollActivityRepository;
import com.experianhealth.rfp.service.FileProcessingActivityRepositoryService;
import com.experianhealth.rfp.service.FileProcessingRequestRepositoryService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static org.mockito.ArgumentMatchers.any;
import static org.powermock.api.mockito.PowerMockito.mockStatic;

@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"})
@PrepareForTest(FileReceivingStateMarkerService.class)
public class FileReceivingStateMarkerServicePowerTest {

    @Mock
    private FileProcessingActivityRepositoryService fileProcessingActivityRepositoryService;
    @Mock
    private FilePollActivityRepository filePollActivityRepository;
    @Mock
    private FileProcessingRequestRepositoryService fileProcessingRequestRepositoryService;

    @Before
    public void setUp() throws Exception {
        mockStatic(Files.class);
    }

    @Test
    public void updateFiles() throws Exception {
        String rootDir = "C:\\files_processor";
        List<FileProcessingRequest> requests = new ArrayList<>();
        FileProcessingRequest request = new FileProcessingRequest();
        request.setClientId("123");
        request.setTradingPartnerId("123");
        request.setDocumentId(DocumentType.Payer);
        request.setFileLocation(rootDir);
        requests.add(request);
        final var fileVisitor = new FileReceivingStateMarkerFileVisitor(filePollActivityRepository
                , fileProcessingActivityRepositoryService
                , request);
        try {
            PowerMockito.when(Files.walkFileTree(Path.of(request.getFileLocation() ), Collections.emptySet(), 1, fileVisitor))
                    .thenReturn(any());
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...