GWT单元测试报NullPointerException:this.service为空该如何解决?
解决GWT单元测试中service为空的问题
问题原因
你的判断正确,gwtSetUp()方法未被GWT测试框架执行,导致service变量未初始化,调用时触发空指针异常。核心问题是测试类的继承关系和gwtSetUp()方法的签名不符合GWT测试规范。
修复步骤
确保测试类继承
GWTTestCase
GWT单元测试类必须继承com.google.gwt.junit.client.GWTTestCase,否则测试框架无法识别并执行gwtSetUp()方法。修正
gwtSetUp()方法签名
该方法需使用protected访问修饰符,添加@Override注解确保重写父类方法,同时声明可能抛出的异常,并且必须调用父类的gwtSetUp()方法:@Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); service = GWT.create(StudenteService.class); ServiceDefTarget target = (ServiceDefTarget) service; target.setServiceEntryPoint(GWT.getModuleBaseURL() + "progettosweng/studenti"); }补充测试结束标记
测试方法中调用了delayTestFinish(10000),但回调方法中未调用finishTest()会导致测试超时,需在onSuccess和onFailure中补充:@Test public synchronized void getNumeroStudenti() throws Exception { delayTestFinish(10000); service.getNumeroStudenti(new AsyncCallback<Integer>() { @Override public void onFailure(Throwable caught) { fail("FAIL: getNumeroStudenti"); finishTest(); } @Override public void onSuccess(Integer result) { assertTrue(true); finishTest(); } }); }
完整修正后的测试类示例
import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.university.client.services.StudenteService; import com.university.client.services.StudenteServiceAsync; public class StudenteServiceTest extends GWTTestCase { StudenteServiceAsync service; @Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); service = GWT.create(StudenteService.class); ServiceDefTarget target = (ServiceDefTarget) service; target.setServiceEntryPoint(GWT.getModuleBaseURL() + "progettosweng/studenti"); } @Override public String getModuleName() { return "com.university"; } @Test public synchronized void getNumeroStudenti() throws Exception { delayTestFinish(10000); service.getNumeroStudenti(new AsyncCallback<Integer>() { @Override public void onFailure(Throwable caught) { fail("FAIL: getNumeroStudenti"); finishTest(); } @Override public void onSuccess(Integer result) { assertTrue(true); finishTest(); } }); } }
内容的提问来源于stack exchange,提问作者Mr Alsi
相关产品推荐
相关产品推荐

