Плагин, который запускает тесты на основе файла пользователя - PullRequest
1 голос
/ 26 июня 2019

Я разрабатываю плагин для IntelliJ для учебных целей, где учащиеся пишут некоторый код, а учитель может писать тесты, а учащиеся могут выполнять эти тесты и проверять, все ли они делают правильно.Было бы здорово, если бы я получил файл, в который пользователь пишет, как класс java, чтобы я мог запускать функции этого класса из другой функции и проверять его так, как если бы я написал его.

То, что у меня есть на данный момент:

  1. На главной панели инструментов у меня есть кнопка, где учащиеся должны иметь возможность выполнять тесты.У меня есть класс, который расширяет AnAction, теперь я понятия не имею, что я должен написать в нем:

    @ Переопределить public void actionPerformed (AnActionEvent e) {

    }
    

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

Заранее большое спасибо:)

1 Ответ

2 голосов
/ 05 июля 2019

Если я правильно понимаю, студенты будут программировать в рамках проекта в IntelliJ?

Затем вы можете получить путь к проекту, над которым они работают, используя AnActionEvent event.

* 1005.*

Вы можете использовать это, чтобы отправить всю папку src на ваш компьютер и делать то, что вам нужно там делать?

Но, это также звучит так, как если бы вы хотели, чтобы студенты проводили тестфункции на их стороне через плагин.В этом случае, один из известных мне вариантов - снова использовать project.getBasePath() или заставить их выбрать файл с помощью графического интерфейса, а затем использовать ProcessBuilder для компиляции, запуска, тестирования и т. Д. Их классов Java.Таким способом вы можете запустить любую команду Windows / shell и перенаправить вывод в IDE или в собственное окно инструментов.

public void actionPerformed(AnActionEvent event) {

    Project project = event.getProject();
    String projectBasePath = project.getBasePath();

    ProcessBuilder pb = new ProcessBuilder();
    pb.directory(projectBasepath);
    pb.command("cmd", "/k", "javac src\*.java")

    pb.redirectErrorStream(true);

    Process process = pb.start();

    BufferedReader reader = new BufferedReader(newInputStreamReader(process.getInputStream()));

    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

    int exitCode = process.waitFor();

    System.out.println("\nExited with error code : " + exitCode);

    ... // anything else you need to do
}

Дайте мне знать, если это имеет смысл - может быть, я могу помочь вам больше, если выдайте мне более конкретные вопросы.

...