测试用例代码:
import java.util.*;
import javax.swing.*;
import junit.extensions.jfcunit.*;
import junit.extensions.jfcunit.eventdata.*;
import junit.framework.*;
import org.apache.regexp.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author leiwei
* @version 1.0
*/
public class LoginScreenTest
extends JFCTestCase {
private LoginScreen loginScreen = null;
private TestHelper helper = null;
public LoginScreenTest(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
helper = new JFCTestHelper();
loginScreen = new LoginScreen("LoginScreenTest: " + getName());
loginScreen.setVisible(true);
}
protected void tearDown() throws Exception {
loginScreen = null;
helper.cleanUp(this);
super.tearDown();
}
public void testUI() {
JDialog dialog;
JButton exitButton = (JButton) helper.findNamedComponent("ExitButton",
loginScreen, 0);
assertNotNull("Could not find the Exit button", exitButton);
JButton enterButton = (JButton) helper.findNamedComponent("EnterButton",
loginScreen, 0);
assertNotNull("Could not find the Enter button", enterButton);
JTextField userNameField = (JTextField) helper.findNamedComponent(
"LoginNameTextField", loginScreen, 0);
assertNotNull("Could not find the userNameField", userNameField);
assertEquals("Username field is empty", "", userNameField.getText());
JTextField passwordField = (JTextField) helper.findNamedComponent(
"PasswordTextField", loginScreen, 0);
assertNotNull("Could not find the passwordField", passwordField);
assertEquals("Password field is empty", "", passwordField.getText());
try {
helper.enterClickAndLeave(new MouseEventData(this, enterButton));
}
catch (Exception ex) {
ex.printStackTrace();
}
List showingDialogs = helper.getShowingDialogs(loginScreen);
assertEquals("Number of dialogs showing is wrong", 2, showingDialogs.size());
dialog = (JDialog) showingDialogs.get(1);
assertEquals("Wrong dialog showing up", "Login Error", dialog.getTitle());
helper.disposeWindow(dialog, this);
}
public static Test suite() {
return new TestSuite(LoginScreenTest.class);
}
public void TestUI(){}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}
小结
1、 JFCUnit的基本框架与原理与Junit一样,其实从实现上是完全基于Junit,是Junit在GUI界面测试上的有效扩展。
2、 JFCUnit功能十分强大,擅长对象实例检查,各种人机界面响应事件的模拟,便于功能性检查。
3、 JFCUnit不善于界面布局,美观方面的检查,看来人工测试还是不可缺少的。
4、 JFCUnit中对对象进行测试的基础是获得测试对象实例,关键是find…Component系列API的应用,具体查找主要基于两个方面,对象组件的“Name”属性和在容器中的Index,而这两种方式都不是很直观,具体使用何种方式也很大程度上取决于开发人员的编码,具体使用时有一定难度和局限性。
5、 JFCUnit还有很多深入用法,比如支持GUI测试的多线程方法,支持XML方式测试,以后有时间再与大家分享。
6、 由于相关资料比较缺乏,很多测试经验完全是个人摸索得来,希望以后有人做更深入的研究。