package com.example;
public class Car {
private String name;
private String model;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
另一类Dependent是
package com.example;
public class Dependent {
public Car callMethod2(){
Car car = new Car();
car.setModel("2009");
car.setName("Tata");
return car;
}
}
另一类Main是
package com.example;
public class Main {
public static String callMethod1(){
return "Hello from callMethod1";
}
public static Car callingCall2(){
Dependent call = new Dependent();
Car args= call.callMethod2();
return args;
}
}
另一类MainTest是
package com.example;
import static net.bytebuddy.implementation.MethodDelegation.to;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static org.junit.Assert.assertEquals;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.agent.ByteBuddyAgent;
import net.bytebuddy.dynamic.loading.ClassReloadingStrategy;
import org.junit.Test;
public class MainTest {
@Test
public void Test1_withByteBuddy()
throws Exception {
ByteBuddyAgent.install();
new ByteBuddy()
.redefine(Dependent.class)
.method(named("callMethod2"))
.intercept(to(Cardetails.class))
.make()
.load(MainTest.class.getClassLoader(),
ClassReloadingStrategy.fromInstalledAgent());
Car car = Main.callingCall2();
System.out.println(car.getModel());
System.out.println(car.getName());
assertEquals("2011",car.getModel());
assertEquals("Maruti",car.getName());
}
public static class Cardetails {
public static Car car() {
Car carTest = new Car();
carTest.setModel("2011");
carTest.setName("Maruti");
return carTest;
}
}
@Test
public void Test2_withOutByteBuddy()
throws Exception {
Car car = Main.callingCall2();
System.out.println(car.getModel());
System.out.println(car.getName());
assertEquals("2009",car.getModel());
assertEquals("Tata",car.getName());
}
}
在我运行MainTest时,第二种方法Test2_withOutByteBuddy()
失败了。为什么因为它从方法Test1_withByteBuddy()
获取由字节伙伴生成的值。那么,在这里我如何清除字节伙伴执行完成后生成的值以及如何从方法Test2_withOutByteBuddy()
获取我期望的值。
答案 0 :(得分:0)
您可以调用:
ClassReloadingStrategy.fromInstalledAgent().reset(Dependent.class)
这样做,Byte Buddy将类重置为其原始的类文件表示。
理想情况下,您应该在try-finally块或@After
方法中执行此操作,以确保即使测试失败也能重置。