我被困在Javassisst。我想将代码放在位于其他类中的方法中。我有“无方法”例外。当我自己启动Test2类时,它启动正常,没有任何错误。我认为Classloader中存在问题,因为我正在尝试从SUTTest类中调用方法以进行断言,并且我正在尝试使用相同的反射(Javassist)与Class1一起使用。也许两个类加载器相互冲突,我不知道。如何修复此错误?
Class1 - Javassist
ClassPool pool = ClassPool.getDefault();
CtClass ctAgent = pool.get("Test2");
CtMethod method = ctAgent.getDeclaredMethod("runTestSamples");
method.insertAfter("targetClass.getMethod(\"setData\", int.class, int.class).invoke(targetInstance, 9, 2);");
// method.insertAt(58, "memoryClassLoader.addDefinition(targetName, instrumented);
memoryClassLoader = new MemoryClassLoader();
targetClass = memoryClassLoader.loadClass(targetName);
targetClass.getMethod(\"setData\", int.class, int.class).invoke(targetInstance, 9, 2);");
ctAgent.toClass();
new Test2().execute();
类 2 - 测试 2
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.jacoco.agent.AgentJar;
import org.jacoco.core.analysis.Analyzer;
import org.jacoco.core.analysis.CoverageBuilder;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.data.SessionInfoStore;
import org.jacoco.core.instr.Instrumenter;
import org.jacoco.core.runtime.IRuntime;
import org.jacoco.core.runtime.LoggerRuntime;
import org.jacoco.core.runtime.RuntimeData;
public class Test2 {
private Runnable targetInstance;
public Class<? extends Runnable> targetClass;
private static HashMap<Integer, String> testSamples;
private static HashMap<String, Integer> coverageData;
public String targetName;
public IRuntime runtime;
public Instrumenter instr;
public InputStream original;
public byte[] instrumented;
public RuntimeData data;
public MemoryClassLoader memoryClassLoader;
static Test2 t2 = new Test2();
int a;
米琪卡哇伊
相关分类