0
我試圖在代理中包裝服務以模擬測試期間的滯後。下面的類意味着包裝一個對象,併爲任何被調用的方法睡100ms。在SleepyProxy中包裝服務以模擬滯後
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SleepyProxy<T> implements InvocationHandler {
private T wrapped;
private SleepyProxy(T toWrap) {
this.wrapped = toWrap;
}
@SuppressWarnings({"unchecked", "rawtypes"})
public static <T> T createProxy(T toWrap) {
Object proxy = Proxy.newProxyInstance(
toWrap.getClass().getClassLoader(),
toWrap.getClass().getInterfaces(),
new SleepyProxy(toWrap));
return (T) proxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = method.invoke(wrapped, args);
nap();
return result;
}
private void nap() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
從我的測試類:
private MyService service = SleepyProxy.createProxy(ServiceProvider.getMyService());
產生以下錯誤:
java.lang.ClassCastException: com.sun.proxy.$Proxy33 cannot be cast to com.example.service.MyService;
請注意:
- 我使用Spring Framework和JUnit4
- 用@RunWith註解的測試類(SpringJUnit4ClassRunner.class)
- 我正在學習Spring;我不確定是否需要使用Spring InvocationHandler/Proxy服務
爲什麼我的問題會轉換爲MyService?調試時,所有對象值似乎排列齊全。有沒有更好的方法可以模擬我的服務滯後? (除了爲每個人提供'測試服務')。
感謝您的幫助!
非常好,這就是它。謝謝! – Chris