Почему я получаю исключение (файл не найден) при прохождении проверки местоположения файла, но он работает с тем же файлом, используя Postman? - PullRequest
0 голосов
/ 18 апреля 2019

Я использую Postman для запуска своего Java-проекта, который работает, как и ожидалось, вставляя файл каталога в качестве входных данных, а затем получая выходной файл, но когда я использую Mockito с модульным тестом для тестирования реального проекта, Тика выдаетИсключение "Файл не найден".

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

Это мой класс RestHandler, который также вызывается из Почтальона:

public class RestHandler {
private final ApplicationConfig applicationConfig;
private final BasicFileHandlerService basicFileHandlerService;
private final TikaService tikaService;
private final AmazonRekognitionAsync amazonRekognitionAsync;


public void processFilesInFolder(String pickUpFolder) {
    //This will print out the file's path 
    System.out.println("ListOfFiles!!!!! : " + pickUpFolder);
    //Here is where I get the exeption
    List<File> allFile = basicFileHandlerService.getAllFile(pickUpFolder);
    for (int i = 0; i < allFile.size() ; i++) {
        String st = String.valueOf(allFile.get(i)).replace("%", " ");
        File file = new File(st);
        allFile.set(i, file);
    }

    allFile.forEach(file -> {
        System.out.println("This is the file: " + file);
        //If I call Tika's method I do get the same exeption as well
        TikaResult extractText = tikaService.extractText(file);
        String fileNoPath = file.getName().substring(String.valueOf(file).indexOf("\\")-2);

Это мой класс обслуживания Tika:

public class TikaService {

private final Parser parser;

public TikaResult extractText(File file) {
    //This doesn't get called because the file I'm passing exists
    if (!file.exists()) {
        System.out.println("does not exist");
    }

    String s = "";
    Metadata metadata = new Metadata();
    ParseContext parseContext = new ParseContext();


    try (ByteArrayOutputStream out = new ByteArrayOutputStream();) {
        ContentHandler contentHandler = new BodyContentHandler(out);

        parser.parse(new FileInputStream(file), contentHandler, metadata, parseContext);
        s = new String(out.toByteArray());

        boolean shouldThrowException = false;
    } catch (IOException | SAXException | TikaException e) {
        e.printStackTrace();
        System.out.println(e);
    }

Это мой тест:

@InjectMocks
RestHandler restHandler;
TikaService tikaService;

@Test
public void contextLoads() {

    File fileForTikaService = new File("src/test/java/TestFiles/Johnson_-_TestTXT.txt");

    restHandler.processFilesInFolder("src/test/java/TestFiles/Johnson_-_TestTXT.txt");
    TikaResult extractText = tikaService.extractText(fileForTikaService);

    File outputTestFile = new File("src/test/java/resources/resultFiles/Johnson_-_TestTXT.txt.csv");

Спасибо!

1 Ответ

0 голосов
/ 24 апреля 2019

Я понял, что издевался не над тем классом, в моем случае класс restHandler - это основной класс, в котором я выполняю свой код из Postman, так что класс не должен быть смоделирован. С другой стороны, классы, которые нужно смоделировать, - это службы (они являются основной причиной, по которой мне нужно смоделировать, потому что обычный тест не будет работать.

Это мой рабочий тест:

@Mock
BasicFileHandlerService basicFileHandlerService;
TikaService tikaService;
ApplicationConfig applicationConfig;
AmazonRekognitionAsync amazonRekognitionAsync;

List<File> files = new LinkedList<>();
List<String[]> rows = new LinkedList<>();

String filePath = ("src\\test\\java\\TestFiles");
String fileContents = "John Johnson is a judge on the Washington State Supreme Court.\n" + "Johnson has been a judge for 14 years.\n";
File fileToVerify = new File("src/test/java/resources/resultFiles/Johnson_-_TestTXT.txt.csv");

@Test
public void OutputTest() throws IOException {

    RestHandler restHandler = new RestHandler(applicationConfig, basicFileHandlerService, tikaService, amazonRekognitionAsync);

    int countFiles = new File(filePath).list().length;

    int alreadyExecuted = 0;

    File outputFile = new File("CSVOutput/Annotations.csv");
    outputFile.delete();
    outputFile.createNewFile();

    //Call to the real class to test
    restHandler.processFilesInFolder(filePath);

    doCallRealMethod().when(basicFileHandlerService).findLine(any(String.class), any(String.class), any(String.class), any(List.class), any(int.class), any(int.class));
    basicFileHandlerService.findLine("Johnson", fileContents,"Johnson_-_TestTXT.txt", rows, countFiles, alreadyExecuted);

    String outputFileContents = new String(Files.readAllBytes(outputFile.toPath()));
    String resultFileContents = new String(Files.readAllBytes(fileToVerify.toPath()));

    Assert.assertEquals(outputFileContents, resultFileContents);
    System.out.println(resultFileContents);

}
...