当我尝试对JDialog对象中的一些方法进行单元测试时,我遇到了NullPointerException。除了调用静态方法之外,我还必须初始化对话框父级的模拟版本以及将要使用的另一个类(代码如下):
@RunWith( PowerMockRunner.class )
@PrepareForTest( ControlFileUtilities.class )
public class StructCompDlgTest
{
@Before
public void setUp() throws Exception
{
controlFrame = org.mockito.Mockito.mock( ControlFrame.class );
structCmpDlg = new StructureCompareDialog( controlFrame );
serverPipeline = org.mockito.Mockito.mock( ServerPipeline.class );
}
...
}
构建对话框的代码如下所示:
StructureCompareDialog( IControlFrame controlFrame )
{
super( (Frame) controlFrame, "title", true );
...
}
当调用超级构造函数时,我最终会在java.awt.Window.addOwnerWindow(Window.java:2525)处收到NullPointerError错误。
void addOwnedWindow(WeakReference weakWindow) {
if (weakWindow != null) {
synchronized(ownedWindowList) { ***<<------ offending line***
// this if statement should really be an assert, but we don't
// have asserts...
if (!ownedWindowList.contains(weakWindow)) {
ownedWindowList.addElement(weakWindow);
}
}
}
}
我知道我在混淆静态和swing gui,但我别无选择。我被要求使用现有的代码编写一些单元测试,但我不知道出了什么问题。
谢谢
synchronized(ownedWindowList)
处出现了空指针异常。如果您检查Window.java中的ownedWindowList
数据成员,它已经被实例化并且从未再次赋值为null。想知道什么可能会使这个数据成员变为null。您能否在代码中检查此数据成员是否被访问(使用反射)并已更改为null。最不可能的情况是需要手动更改此数据成员,但最好确保一下。 - Yogesh Ralebhat