基于用户文件运行测试的插件

Plugin that runs tests based on file of user

我正在为 IntelliJ 开发一个用于教学目的的插件,学生可以在其中编写一些代码,教师可以编写测试,学生可以 运行 这些测试,看看他们是否全部正确完成。如果我能将用户正在写入的文件作为 java class 这样我就可以从另一个函数中 运行 那个 class 的函数并且测试它就好像我会写它一样。

我目前拥有的:

  1. 在主工具栏中我有一个按钮,学生应该可以在其中 运行 测试。我有一个扩展 AnAction 的 class,现在我不知道我应该在里面写什么:

    @Override public void actionPerformed(AnActionEvent e) {

    }
    

我已经浏览 IntelliJ 文档一段时间了,但到目前为止我还没有进一步了解。我当然希望可以在这里找到的有经验的开发人员可以给我一两个提示。

提前致谢:)

如果我没理解错的话,学生们会在 IntelliJ 的项目中编程吗?

然后您可以使用 AnActionEvent event.

获取他们正在处理的项目的路径
Project project = event.getProject();
String projectBasePath = project.getBasePath();

您可以使用它将整个 src 文件夹发送到您的计算机并在那里执行您需要执行的操作吗?

但是,听起来您也希望学生们通过插件 运行 在他们这边测试功能。在那种情况下,我知道的一个选择是再次使用 project.getBasePath(),或者使用 GUI 将它们 select 一个文件,然后使用 ProcessBuilder 进行编译,运行、测试等 Java 类。您可以 运行 任何 Windows / shell 命令,并将输出通过管道传输到 IDE 或您自己的工具 window.

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
}

让我知道这是否有意义 - 如果您能给我更具体的问题,也许我可以为您提供更多帮助。