Поэтому, если я вызываю любое утверждение JUnit, которое не выполняется изнутри метода обратного вызова, я получаю следующее исключение:
Mar 12, 2012 11:24:41 AM
com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl runJob
SEVERE: Job run failed with unexpected RuntimeException: [object Class JavaObject] (injected script#14)
net.sourceforge.htmlunit.corejs.javascript.JavaScriptException: [object Class JavaObject] (injected script#14)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1062)
at script(injected script:14)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:845)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:269)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3162)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:162)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:559)
at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest.setState(XMLHttpRequest.java:181)
at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest.doSend(XMLHttpRequest.java:525)
at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest.access$000(XMLHttpRequest.java:64)
at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest$1.run(XMLHttpRequest.java:461)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest$2.run(XMLHttpRequest.java:467)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl.runJob(JavaScriptJobManagerImpl.java:226)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl.runSingleJob(JavaScriptJobManagerImpl.java:307)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutor.run(JavaScriptExecutor.java:182)
at java.lang.Thread.run(Thread.java:722)
Простой тест, который производит это:
public void testSimple() {
MyPrgrmServiceAsync serv = GWT.create(MyPrgrmService.class);
serv.search("some query", new AsyncCallback<SearchResult>() {
public void onSuccess(SearchResult sr) {
fail();
}
public void onFailure(Throwable caught) {
fail(caught.toString());
}
});
delayTestFinish(60000);
}
Когда этот тест запускается, он "проходит" настолько, насколько JUnit Runner касается зеленой полосы, отображаемой в Eclipse, но, очевидно, он должен провалиться. Единственным признаком того, что что-то пошло не так, является исключение в консоли. Если я перемещаю fail () за пределы обратного вызова, он обычно завершается неудачно и указывает на это. Кроме того, утверждения, которые принимают значение true, ведут себя нормально, поэтому кажется, что тест просто не знает, как обнаруживать сбои, когда они возникают из анонимных классов. Есть ли что-то, что я не правильно понимаю о том, как использовать утверждения JUnit в обратных вызовах / анонимных классах относительно GWTTestCase?