【发布时间】:2015-03-19 17:18:27
【问题描述】:
我必须测试 Flash Player 是否正确地通过网络发送请求。为此,我使用 BrowserMob 代理来捕获流量。 我的问题是我必须等待播放的视频结束才能测试最终请求。所以作为临时解决方案,在我的测试中,我放了一个 Thread.sleep(videoDuration)。但 IMO 并不是很好,总体而言,持续时间可能会改变。 BrowserMob 允许在请求上添加拦截器。所以我想到了通知和等待功能。
这是我的第一次尝试:
protected static boolean percent100Done;
protected static final Object percent100lock = new Object();
@BeforeClass
public static void addInterceptor() {
ProxyServer server = Server.init();
server.addRequestInterceptor((BrowserMobHttpRequest request, Har har) -> {
String percent = request.getProxyRequest().getParameter("percent");
if("100".equals(percent)) {
percent100Done = true;
synchronized (percent100lock) {
percent100lock.notify();
}
}
});
}
@Test
public void testFinalRequest() throws InterruptedException {
driver.get(myurl);
synchronized (percent100lock) {
while (!percent100Done) {
percent100lock.wait();
}
}
//test continue
}
我测试了这段代码,它可以工作。但它似乎有点脏,尤其是新的 Object 行。如果我必须为 25%、50% 和 75% 添加通知会怎样?我将需要 3 个其他布尔值并锁定?
【问题讨论】:
标签: java multithreading wait notify