服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

jfcunit测试gui的一个实例(代码篇)


  有关如何设置jfcunit,请参考我前面的文章:jfcunit测试gui的一个实例(配置篇)
  
  http://blog.csdn.net/eaglewatch/archive/2005/08/24/464541.aspx
  
  下面给出被测试代码,因为只是普通的样例,所以不加以太多的说明。这段gui代码的编写使用了eclipse的gui创建插件――visual editor,如果你有兴趣可以去相关的网站看看,有关这方面的介绍还是很多的。
  
  因为时参考一部分资料,加上自己摸索做的demo,如果有什么问题和建议欢迎和我联系(danielwjiang@gmail.com)我会在第一时间更新这篇文章。
  
  下面的应用程序的主要功能是,当用户在jtestfield中输入数据,显示控件会同步显示输入的信息,点击ok按钮退出程序。
  
  jfcunit没有直接在eclipse内建的项目中给出可视化的创建jfcunit test case的方法(也许是我我没有了解到)。这里采用的方法是利用eclipse内提供的junit test case创建向导产生一个junittestcase的派生类,然后改变extend后面的类名称为jfctestcase。因为jfcunit是junit的一个延伸,所以你这样做不会有任何问题。
  
  这便有必要提一下的是,junit对于我们的用户界面,除了它默认的原始类构造函数,main(),构造函数setup()和析构函数teardown()以外,不会创建任何测试函数,这一点和junit一般的测试不同,所以我们必须手动创建一些测试函数。
  
  手动创建的函数必须满足:
  
  §   它是一个public final的函数
  
  §   而且必须以test冠以函数名
  
  要演示的例子当中可以看到的手动添加的函数有两个,一个是testdialog(),另一个是testallcomponentsinit()。先看testdialog()这个函数:
  
  public final void testdialog() {
  
  jdialog dialog;
  
  java.util.list showingwindows;
  
  namedcomponentfinder finder = new namedcomponentfinder(
  
  jcomponent.class, "okbutton");
  
  jbutton okbutton = (jbutton) finder.find(demo, 0);
  
  assertnotnull("could not find the ok button", okbutton);
  
  dialogfinder dfinder = new dialogfinder(demo.gettitle());
  
  showingwindows = dfinder.findall();
  
  dialog = (jdialog) showingwindows.get(0);
  
  finder.setname("inputfield");
  
  inputtext = (jtextfield) finder.find(demo, 0);
  
  assertnotnull("could not find jtextfield", inputtext);
  
  finder.setname("displayfield");
  
  displaytext1 = (jtextfield) finder.find(demo, 0);
  
  assertnotnull("could not find jtextfield", displaytext1);
  
  xmlparser xmlfile;
  
  int len;
  
  try {
  
  xmlfile = new xmlparser();
  
  xmlfile.seturi(".//config.xml");
  
  len = xmlfile.gettestdatalistlength();
  
  ctrlname = xmlfile.getctrlnames();
  
  ctrlvalue = xmlfile.getctrlvalues();
  
  string content = htmlmaker.htmlfileheader();
  
  for (int i = 0; i < len; i++) {
  
  try {
  
  index = i;
  
  // make the text field get the focus
  
  pauseawt();
  
  inputtext.settext(ctrlvalue[i]);
  
  inputtext.requestfocus();
  
  assertequals("set focus failed.", inputtext.gettext(),
  
  ctrlvalue[i]);
  
  jfctesthelper.disposewindow(dialog, this);
  
  okbutton.requestfocus();
  
  flushawt();
  
  // gernate the report of the test
  
  content = htmlmaker.htmlfilecontentsfill(content, inputtext
  
  .getname(), inputtext.gettext());
  
  content = htmlmaker.htmlfilecontentsfill(content, displaytext1
  
  .getname(), displaytext1.gettext());
  
  // simulate click the ok button.
  
  pauseawt();
  
  gethelper().enterclickandleave(
  
  new mouseeventdata(this, okbutton));
  
  flushawt();
  
  } catch (exception ex) {
  
  ex.printstacktrace();
  
  }
  
  }
  
  content = htmlmaker.htmlfileend(content);
  
  htmlmaker html = new htmlmaker(content);
  
  } catch (exception ex) {
  
  ex.printstacktrace();
  
  }
  
  }
  
  §   namedcomponentfinder finder = new namedcomponentfinder(jcomponent.class, "okbutton");
  
  namedcomponentfinder是jfcunit提供的类,用来寻找当前窗体中的控件类实例。这边调用了带参构造函数找寻ok按钮。
  
  §   jbutton okbutton = (jbutton) finder.find(demo, 0);
  
  利用找到的结果来获得ok按钮的控制。
  
  §   assertnotnull("could not find the ok button", okbutton);
  
  为了使下面的测试有意义,所以有必要判断是否为非空的,否则判定当前的testcase没有成功。
  
  §   dialogfinder dfinder = new dialogfinder(demo.gettitle());
  
  showingwindows = dfinder.findall();
  
  dialog = (jdialog) showingwindows.get(0);
  
  是可以用上面讲到的内容举一反三了解它的功能是获取窗体实例。
  
  §   inputtext.requestfocus();
  
  使输入对话框获取焦点。
  
  §   gethelper().enterclickandleave(new mouseeventdata(this, okbutton));
  
  模拟鼠标点击事件。
  
  §   pauseawt();
  
  用来停止awt的事件队列,根据文档上的说明,使用pauseawt()会在调用releaseawt()以后后恢复队列的运行。但是我尝试调用这个releaseawt()函数,eclipse告诉我没有这样的函数定义。在文档中搜索着个函数的定义没有发现。这里我用了flushawt()来达到启动队列的效果。
  
  §   flushawt();
  
  上面我们提到了是启动消息队列。

扫描关注微信公众号