将JUnit中的DataTable.create()与GWTTestCase一起使用时发生JavaScriptException

将JUnit中的DataTable.create()与GWTTestCase一起使用时发生JavaScriptException,java,javascript,gwt,junit,datatable,Java,Javascript,Gwt,Junit,Datatable,对于一个学校项目,我必须测试我的一个班级。在编写和执行测试之后,我得到了以下错误消息和stacktrace: com.google.gwt.core.client.JavaScriptException: (null) @com.google.gwt.visualization.client.DataTable::create()([]): null at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(

对于一个学校项目,我必须测试我的一个班级。在编写和执行测试之后,我得到了以下错误消息和stacktrace:

com.google.gwt.core.client.JavaScriptException: (null)       
@com.google.gwt.visualization.client.DataTable::create()([]): null
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:249)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:284)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.visualization.client.DataTable$.create(DataTable.java)
at com.gwt.client.VizualizationManagerTest.gwtSetUp(VizualizationManagerTest.java:150)
...
从我读到的内容来看,问题在于方法:
DataTable.create()
,它创建了一个默认的
DataTable
,以后可能会用列和行填充

我想测试数据是否设置正确。在我的课堂上,我正在测试以验证初始数据是否正在重新格式化,以便它可以用于
GWT图
。所以基本上我取一个非常大的
数据表
,然后将它转换成一个较小的
数据表
数组列表
。但据我所知,我的测试甚至没有达到测试特定方法的程度,而是陷入了:
@Before
方法:
gwtSetUp()
on
DataTable.create()

以下是我的测试代码:

package com.gwt.client;

import static org.junit.Assert.*;
import java.util.Random;
import org.junit.Before;
import org.junit.Test;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.visualization.client.AbstractDataTable;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;

public class VizualizationManagerTest extends GWTTestCase {
    @Test
    public void testPrepareData() {
        VisualizationManager.TableDATA = (DataTable) data;
        VisualizationManager.prepareData();
        assertEquals(data.getNumberOfColumns(), VisualizationManager.DATA.length);
        assertEquals(data.getNumberOfRows(), VisualizationManager.DATA[VisualizationManager.DATA.length-1].getNumberOfRows());

        //check all Cells for equality
        for (int i = 0; i < data.getNumberOfColumns()-1; i++) {
            for (int j = 0; j < data.getNumberOfRows(); j++) {
                String test1 = VisualizationManager.DATA[i].getFormattedValue(j, 0);
                String tested1 = data.getFormattedValue(j, i+1);
                assertEquals(tested1, test1);
            }
        }
    }

    public AbstractDataTable data;

    @Before
    public void gwtSetUp() {
        DataTable mydata = DataTable.create();
        mydata.addColumn(ColumnType.STRING, "Country");
        mydata.addColumn(ColumnType.NUMBER, "2011");
        mydata.addColumn(ColumnType.NUMBER, "2010");
        mydata.addColumn(ColumnType.NUMBER, "2009");
        mydata.addRows(5);
        mydata.setCell(0, 0, "Switzerland", "Switzerland", null);
        mydata.setCell(1, 0, "Germany", "Germany", null);
        mydata.setCell(2, 0, "Austria", "Austria", null);
        mydata.setCell(3, 0, "Slovakia", "Slovakia", null);
        mydata.setCell(4, 0, "Czech Republic", "Czech Republic", null);
        Random random = new Random();
        for (int i=1; i<4; i++) {
            for (int j=0; j<5; j++) {
                double number = random.nextDouble() % 1000.0;
                mydata.setCell(j, i, number, Double.toString(number), null);
            }
        }
        data = mydata;
    }

    @Override
    public String getModuleName() {
        return "com.gwt.AgrarAlpha_v1";
    }
}
package com.gwt.client;
导入静态org.junit.Assert.*;
导入java.util.Random;
导入org.junit.Before;
导入org.junit.Test;
导入com.google.gwt.core.client.JavaScriptObject;
导入com.google.gwt.junit.client.gwtsetcase;
导入com.google.gwt.user.client.ui.Label;
导入com.google.gwt.visualization.client.AbstractDataTable;
导入com.google.gwt.visualization.client.DataTable;
导入com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
公共类VizalizationManagerTest扩展了GWTTestCase{
@试验
公共无效测试准备数据(){
VisualizationManager.TableDATA=(DataTable)数据;
VisualizationManager.prepareData();
assertEquals(data.getNumberOfColumns(),VisualizationManager.data.length);
assertEquals(data.getNumberOfRows(),VisualizationManager.data[VisualizationManager.data.length-1].getNumberOfRows());
//检查所有单元格是否相等
对于(int i=0;i对于(inti=1;i,所有GWT可视化内容(在实际代码以及JUnit和GWTtestCase中)的问题是需要在web上重新加载它。
这意味着,与GWT可视化相关的所有内容都需要按照以下方式编写:

class Test extends GWTTestCase{
    @Test
    public void testSomething{
        Runnable onLoadCallback = new Runnable() {
            public void run() {
                ...
            }
        };

        VisualizationUtils.loadVisualizationApi(onLoadCallback, Table.PACKAGE);
    }
}

我试图在没有测试和其他实现的情况下创建gwt图……我抛出了一个exeption:无法读取方法DataTable.create()的未定义属性“visualization”……我开始认为我不能在java中使用gwt图。