2013-01-02 35 views
2

我想爲我創建的GWT複合組件編寫測試用例,我使用了擴展com.google.gwt.user.client.ui.Composite的Count類,並且在這個Count中我有一個文本框和一些處理程序可以根據這些值顯示標籤。我試圖編寫這個類的測試用例, 我試着像下面的代碼,但它總是顯示相同的錯誤:java.lang.NoSuchMethodError:org.mortbay.thread.Timeout。(Ljava/lang/Object;) V如何配置GWTTestCase擴展類

我的代碼是:

package com.rubirules.uibuilder.client; 
import org.junit.Test; 
import com.google.gwt.junit.client.GWTTestCase; 
public class CountTest extends GWTTestCase { 
    @Override 
    public String getModuleName() { 
     return "com.rubirules.uibuilder.client.Count"; 
    } 
    @Test 
    public void testNullConstructor(){ 
      assertFalse(true); 
         //TODO need to add some code to test Count class 
    } 
} 

我也想知道有什麼用getModuleName()方法?我已經給出了我的課程的字符串路徑。

的compleate錯誤信息是:

java.lang.NoSuchMethodError: org.mortbay.thread.Timeout.<init>(Ljava/lang/Object;)V 
    at org.mortbay.io.nio.SelectorManager$SelectSet.<init>(SelectorManager.java:306) 
    at org.mortbay.io.nio.SelectorManager.doStart(SelectorManager.java:223) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:303) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.Server.doStart(Server.java:233) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.junit.JUnitShell.getUnitTestShell(JUnitShell.java:707) 
    at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:652) 
    at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:441) 
    at junit.framework.TestCase.runBare(TestCase.java:134) 
    at junit.framework.TestResult$1.protect(TestResult.java:110) 
    at junit.framework.TestResult.runProtected(TestResult.java:128) 
    at junit.framework.TestResult.run(TestResult.java:113) 
    at junit.framework.TestCase.run(TestCase.java:124) 
    at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:296) 
    at junit.framework.TestSuite.runTest(TestSuite.java:243) 
    at junit.framework.TestSuite.run(TestSuite.java:238) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
    [WARN] failed [email protected]:0 
java.lang.NoSuchMethodError: org.mortbay.thread.Timeout.<init>(Ljava/lang/Object;)V 
    at org.mortbay.io.nio.SelectorManager$SelectSet.<init>(SelectorManager.java:306) 
    at org.mortbay.io.nio.SelectorManager.doStart(SelectorManager.java:223) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:303) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.Server.doStart(Server.java:233) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.junit.JUnitShell.getUnitTestShell(JUnitShell.java:707) 
    at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:652) 
    at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:441) 
    at junit.framework.TestCase.runBare(TestCase.java:134) 
    at junit.framework.TestResult$1.protect(TestResult.java:110) 
    at junit.framework.TestResult.runProtected(TestResult.java:128) 
    at junit.framework.TestResult.run(TestResult.java:113) 
    at junit.framework.TestCase.run(TestCase.java:124) 
    at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:296) 
    at junit.framework.TestSuite.runTest(TestSuite.java:243) 
    at junit.framework.TestSuite.run(TestSuite.java:238) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
    [WARN] failed [email protected] 
java.lang.NoSuchMethodError: org.mortbay.thread.Timeout.<init>(Ljava/lang/Object;)V 
    at org.mortbay.io.nio.SelectorManager$SelectSet.<init>(SelectorManager.java:306) 
    at org.mortbay.io.nio.SelectorManager.doStart(SelectorManager.java:223) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:303) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at org.mortbay.jetty.Server.doStart(Server.java:233) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672) 
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509) 
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093) 
    at com.google.gwt.junit.JUnitShell.getUnitTestShell(JUnitShell.java:707) 
    at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:652) 
    at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:441) 
    at junit.framework.TestCase.runBare(TestCase.java:134) 
    at junit.framework.TestResult$1.protect(TestResult.java:110) 
    at junit.framework.TestResult.runProtected(TestResult.java:128) 
    at junit.framework.TestResult.run(TestResult.java:113) 
    at junit.framework.TestCase.run(TestCase.java:124) 
    at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:296) 
    at junit.framework.TestSuite.runTest(TestSuite.java:243) 
    at junit.framework.TestSuite.run(TestSuite.java:238) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

回答

1

請檢查Google GWT團隊如何編寫小部件的測試用例。您可以在谷歌的GWT主幹代碼查看它們 - http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/test/com/google/gwt/user/client/ui

編輯與答案來自評論:

變化getModuleName()返回的字符串,以反映GWT模塊文件路徑com.rubirules.uibuilder.UIbuilder

+0

package com.google.gwt.user.client.ui; public class ButtonTest extends GWTTestCase { private static final String html =「hello world」; @Override public String getModuleName(){ return「com.google.gwt.user.User」; } 你能告訴我這個getModuleName()返回什麼嗎? – Dipak

+0

這是一個硬編碼的字符串「com.google.gwt.user.User」,對應於gwt-user.jar的gwt模塊文件 – SSR

+0

謝謝你的鏈接。我解決了我的問題, 我將com.google.appengine.eclipse.sdkbundle_1.7.4更改爲1.7.3 ,並將我的getNameModule路徑更改爲com.rubirules.uibuilder.UIbuilder,對應於模塊文件。 謝謝。 :) – Dipak

1

我建議你使用gwt-test-utils,它有完整的文檔和samples

+0

先生,其實我覺得我的問題是與getModuleName()方法,我不知道確切的模塊路徑。當我使用null並且沒有引用Count時,它顯示沒有錯誤,但要使用Count類,我必須給出確切的模塊路徑。你知道什麼是模塊路徑? – Dipak

+0

它是您的* .gwt.xml位置加上模塊名稱的路徑。例如:com.googlecode.gwt.test.sample.SpringSample –