gpt4 book ai didi

java - GWTTestCase:回调中的 JUnit 断言引发 JavaScriptException

转载 作者:行者123 更新时间:2023-11-30 11:46:42 25 4
gpt4 key购买 nike

因此,如果我从回调方法中调用任何失败的 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 的断言表现正常,因此测试似乎根本不知道如何检测匿名类中出现的故障。关于如何在关于 GWTTestCase 的回调/匿名类中使用 JUnit 断言,我是否没有正确理解?

最佳答案

您的基本理解似乎是正确的 - delayTestFinish 的任务是不允许测试通过,除非在给定的毫秒数(60 秒,在您的情况下)内调用 finishTest() .无需在任一回调方法中调用 finishTest(),因为 fail 会抛出异常(如果代码执行到那一步的话)。

您确定测试成功完成了吗?正如所写,如果配置错误并且调用永远不会到达服务器,或者服务器永远不会返回,则 failfinishTest 都不能被调用,因此测试方法不能经过。确保在接受结果“通过”之前等待整整 60 秒 - 如果从未调用 finishTest,则测试方法将不会被视为完成,或者应被视为失败.

也就是说,查看异常很有用 - 这是来自模拟浏览器 - htmlunit - 并且此异常是“浏览器”中出现的问题。从简短的跟踪和没有其他日志语句来看,很难说出到底出了什么问题。您也可以考虑在真实的浏览器中运行它,看看是否会出现更有用的错误 - 查看 http://code.google.com/webtoolkit/doc/latest/DevGuideTestingRemoteTesting.html了解如何在开发模式或生产模式下从常规浏览器运行测试。

另一个想法可能是向 GWT 注册一个未捕获的异常处理程序以查看它接收到什么 - 可能是其他一些异常正在终止测试,并且以某种方式阻止 delayTestFinish 正常运行(虽然我从来没有听说过这样的事情)。

GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void onUncaughtException(Throwable e) {
fail(e.getMessage());
}
});

关于java - GWTTestCase:回调中的 JUnit 断言引发 JavaScriptException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9653133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com