我有一个小应用程序Phonebook,我想测试它。我对uispec4j有一些问题,我写这个:
public class TestRubricaBlack extends UISpecTestCase{
@BeforeClass
public void setUp(){
setAdapter(new MainClassAdapter(Rubrica.class, new String[0]));
}
public void testMamma(){
Window window=getMainWindow();
assertEquals(true,window.getButton("index").isVisible());
}
}
当我尝试执行测试时,我遇到了这个错误,问题出在函数getMainWindow()上:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.uispec4j.utils.TriggerRunner.runInCurrentThread(TriggerRunner.java:18)
at org.uispec4j.interception.WindowInterceptor.run(WindowInterceptor.java:320)
at org.uispec4j.interception.WindowInterceptor.run(WindowInterceptor.java:290)
at org.uispec4j.interception.MainClassAdapter.getMainWindow(MainClassAdapter.java:24)
at org.uispec4j.UISpecTestCase.getMainWindow(UISpecTestCase.java:84)
at it.is2.TestRubricaBlack.testMamma(TestRubricaBlack.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:168)
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 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)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.uispec4j.utils.MainClassTrigger.run(MainClassTrigger.java:22)
at org.uispec4j.utils.TriggerRunner.runInCurrentThread(TriggerRunner.java:12)
... 24 more
Caused by: java.lang.NullPointerException: peer
at sun.awt.windows.WTextFieldPeer.create(Native Method)
at sun.awt.windows.WComponentPeer.<init>(WComponentPeer.java:595)
at sun.awt.windows.WTextComponentPeer.<init>(WTextComponentPeer.java:36)
at sun.awt.windows.WTextFieldPeer.<init>(WTextFieldPeer.java:65)
at sun.awt.windows.WToolkit.createTextField(WToolkit.java:332)
at org.uispec4j.interception.toolkit.ToolkitDelegate.createTextField(ToolkitDelegate.java:262)
at java.awt.TextField.addNotify(TextField.java:205)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at java.awt.Container.addNotify(Container.java:2592)
at javax.swing.JComponent.addNotify(JComponent.java:4683)
at javax.swing.JRootPane.addNotify(JRootPane.java:735)
at java.awt.Container.addNotify(Container.java:2592)
at java.awt.Window.addNotify(Window.java:638)
at java.awt.Frame.addNotify(Frame.java:469)
at java.awt.Window.show(Window.java:823)
at it.is2.Rubrica.main(Rubrica.java:26)
... 30 more
有人能帮我吗?提前感谢
堆栈跟踪告诉找不到名为"index"的按钮。我不知道为什么。以下是我的最佳猜测:
- 您没有定义名为"索引"的按钮
- 你拼错了名字
- 按钮在面板上定义,而不是直接在主窗口上定义
我在第三项上遇到了麻烦,这就是我看到你帖子的原因。我可能错了,但uispec4j似乎不会自动在容器中查找面板,在我的例子中,还有JScrollPanes。
如果我发现我对这种行为有错,我会更新我的回复。如果我想出一个解决方案,也许是一个定制的匹配器,我也会发布它。
祝你好运。