gpt4 book ai didi

java - 如何测试 .class 文件是否已创建?

转载 作者:行者123 更新时间:2023-11-30 06:38:53 24 4
gpt4 key购买 nike

我想对我的代码进行单元测试,这将必须创建一个 .java 文件对其进行编译,然后应创建相应的 .class 文件。

如何创建测试以查看是否创建了“.class”文件?我已经为它的存在添加了测试,现在我正在尝试测试该文件是否是一个有效的类文件。

我试过了

 try  {
Class.forName("Hello");
throw AssertError();
} catch( ClassNotFoundException e ) {
}

program.createClass();
Class.forName("Hello");

但我真的不知道如何将创建文件的路径动态添加到类路径中。

编辑

加载的 URL 类完成工作。

这就是我的测试现在的样子。

@Test
void testHello() throws MalformedURLException, ClassNotFoundException {
URL[] url = {
new URL("file:/home/oreyes/testwork/")
};

try {
new URLClassLoader(url).loadClass("Hello");
throw new AssertionError("Should've thrown ClassNotFoundException");
} catch ( ClassNotFoundException cnfe ){

}
c.process();
new URLClassLoader(url).loadClass("Hello");
}

最佳答案

使用 URLClassLoader 的新实例,指向您创建目标类文件的根文件夹。然后,使用 Class.forName(String,ClassLoader); 方法和动态创建的 URLClassLoader 加载新类。

为了证明它的工作原理,以下测试用例将创建一个源文件,在其中编写一些 Java 代码并使用 Java 6 ToolProvider 接口(interface)对其进行编译。然后,它将使用 URLClassLoader 动态加载该类并调用对其类名的反射调用以验证它确实是动态生成的此类。

@Test
public void testUrlClassLoader() throws Exception {
Random random = new Random();
String newClassName = "Foo" + random.nextInt(1000);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
List<File> files = new ArrayList<File>();
File sourceFolder = new File(".");
File sourceFile = new File(sourceFolder, newClassName + ".java");
FileWriter fileWriter = new FileWriter(sourceFile);
fileWriter.write("public class " + newClassName + " { { System.out.println(\""
+ newClassName + " loaded\"); }}");
fileWriter.close();
files.add(sourceFile);
Iterable<? extends JavaFileObject> compilationUnits1 = fileManager
.getJavaFileObjectsFromFiles(files);
compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call();
fileManager.close();

URL url = sourceFolder.toURI().toURL();
URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { url });
Object newInstance = urlClassLoader.loadClass(newClassName).newInstance();
assertEquals(newClassName, newInstance.getClass().getName());
}

关于java - 如何测试 .class 文件是否已创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1738712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com