0

在一个用于突变测试的软件中,创建了许多 java 扩展文件的突变(如mutant01.java)。现在我需要使用 jUnit4 来测试这些文件。我正在尝试找出能够读取文件然后从该文件访问特定类并对其执行 jUnit 测试的方式。但我需要帮助吗?

我找到了仅导致我的文件被上传但我无法从该文件访问内容或特定类的方法。

@Test
public void testReadFileWithClassLoader(){
    try {
        ClassLoader classLoader = this.getClass().getClassLoader();
        File file = new File(classLoader.getResource("arith.java").getFile());
        Class<? extends File> f=file.getClass();
        assertTrue(file.exists());

我希望我能够从 java 扩展文件访问该类,然后对其执行 junit 测试,但实际上我被困在它上面。

4

1 回答 1

0

AS @John Mercier 指出您必须先编译您的类,然后再加载它。您可以使用jOOR来简化操作。

jOOR - Java 中的流利反射 jOOR 是一个非常简单的流利 API,它可以更直观的方式访问您的 Java 类结构。JDK 的反射 API 使用起来既困难又冗长。其他语言有更简单的结构来在运行时访问类型元信息。让我们更好地改进 Java 反射。

用于 Java 9+

<dependency>
  <groupId>org.jooq</groupId>
  <artifactId>joor</artifactId>
  <version>0.9.7</version>
</dependency>

用于 Java 8+

<dependency>
  <groupId>org.jooq</groupId>
  <artifactId>joor-java-8</artifactId>
  <version>0.9.7</version>
</dependency>

用于 Java 6+

<dependency>
  <groupId>org.jooq</groupId>
  <artifactId>joor-java-6</artifactId>
  <version>0.9.7</version>
</dependency>

使用示例:

Supplier<String> supplier = Reflect.compile(
    "com.example.HelloWorld",
    "package com.example;\n" +
    "class HelloWorld implements java.util.function.Supplier<String> {\n" +
    "    public String get() {\n" +
    "        return \"Hello World!\";\n" +
    "    }\n" +
    "}\n").create().get();

// Prints "Hello World!"
System.out.println(supplier.get());

请注意,您必须先将.java文件作为字符串读取

于 2019-08-01T20:04:21.370 回答