#java #junit
Вопрос:
У меня есть программа JUnit, которая работает нормально
LauncherDiscoveryRequestBuilder builder = LauncherDiscoveryRequestBuilder.request() ; for (Class clazz : classes) { builder.selectors( selectClass( clazz ) ) ; } LauncherDiscoveryRequest request = builder.build() ; launcher.execute( request ) ;
Обычный загрузчик классов, никаких проблем .
Теперь я написал простое горячее развертывание и получил классы в обычном режиме
public class HotClassLoader extends ClassLoader { private File classPath ; public HotClassLoader(String path) throws IOException { super(ClassLoader.getSystemClassLoader()) ; this.classPath = new File( path ) ; } @Override public Classlt;?gt; findClass(String name) throws ClassNotFoundException { byte[] classByte = null; classByte = readClassFile(name); if (classByte == null || classByte.length == 0) { throw new ClassNotFoundException("ClassNotFound : " name); } return this.defineClass(name, classByte, 0, classByte.length); } private byte[] readClassFile(String name) throws ClassNotFoundException { String fileName = name.replace(".", "/") ".class"; File classFile = new File(this.classPath, fileName); if (!classFile.exists() || classFile.isDirectory()) { throw new ClassNotFoundException("ClassNotFound : " name); } try(FileInputStream fis = new FileInputStream(classFile)){ int available = fis.available(); int bufferSize = Math.max(Math.min(1024, available), 256); ByteBuffer buf = ByteBuffer.allocate(bufferSize); byte[] bytes = null; FileChannel channel = fis.getChannel(); while (channel.read(buf) gt; 0) { buf.flip(); bytes = traslateArray(bytes, buf); buf.clear(); } return bytes; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public byte[] traslateArray(byte[] bytes, ByteBuffer buf) { if (bytes == null) { bytes = new byte[0]; } byte[] _array = null; if (buf.hasArray()) { _array = new byte[buf.limit()]; System.arraycopy(buf.array(), 0, _array, 0, _array.length); } else { _array = new byte[0]; } byte[] _implyArray = new byte[bytes.length _array.length]; System.arraycopy(bytes, 0, _implyArray, 0, bytes.length); System.arraycopy(_array, 0, _implyArray, bytes.length, _array.length); bytes = _implyArray; return bytes; } }
Запустите JUnit снова, никакого ответа, никаких исключений, ничего , почему???
…………………………………………………………….
Вызывает ли JUnit загрузчик классов? Я не писал HotClassLoader полностью.