Nun hatte ich mal wieder Zeit, mich um dieses Problem zu kümmern. Hier eine Lösung wie ich sie mir erarbeitet habe. Möge sie anderen hilfreich sein.
In einer main-Methode wird ein JFrame erzeugt, in den eine Instanz meiner Klasse MyPanel eingefügt wird. MyPanel ist wiederum von JPanel abgeleitet und enthält einen Button und ein Textfeld. Ähnlich wie das Beispiel auf der FEST-Seite.
Wenn die Applikation gestartet wird, steht im Textfeld eine Zeichenkette, die ungefähr so aussieht: "xxxxxxxxx". Wird auf den Button geklickt, wird in das Textfeld die Zeichenkette "eingabe" geschrieben.
Meine Schwierigkeit war nun, wie erhalte ich auf den JFrame zugriff, wenn ich eine Applikation starte. Zuerst einmal hier der Code:
Applikation:
Code:
package org.fest.demo;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class JavaApp{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("============started");
JFrame frame = new JFrame("Java Application");
MyPanel panel=new MyPanel();
frame.add(panel);
frame.setSize(300, 200);
frame.setVisible(true);
}
});
}
}
Hier der eingefügte Panel:
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyPanel extends JPanel implements ActionListener{
private JButton button;
private JTextField textField;
public MyPanel(){
setName("inner_panel");
button=new JButton("ABC");
button.setName("button");
button.addActionListener(this);
textField=new JTextField();
textField.setText("xxxxxxxxxxxxxxxxx");
textField.setName("textfield");
add(button);
add(textField);
}
@Override
public void actionPerformed(ActionEvent ae) {
textField.setText("eingabe");
}
}
Und hier die Testklasse:
Code:
package org.fest.demo;
import java.awt.Frame;
import javax.swing.JFrame;
import javax.swing.text.JTextComponent;
import org.fest.swing.annotation.RunsInEDT;
import org.fest.swing.core.GenericTypeMatcher;
import org.fest.swing.core.Robot;
import org.fest.swing.finder.FrameFinder;
import org.fest.swing.finder.WindowFinder;
import org.fest.swing.fixture.FrameFixture;
import org.fest.swing.fixture.JButtonFixture;
import org.fest.swing.fixture.JPanelFixture;
import org.fest.swing.fixture.JTextComponentFixture;
import org.fest.swing.junit.testcase.FestSwingJUnitTestCase;
import org.junit.Test;
import static org.fest.swing.launcher.ApplicationLauncher.*;
import static org.junit.Assert.*;
public class JavaAppTest extends FestSwingJUnitTestCase{
private FrameFixture frame=null;
@Override
protected void onSetUp() {
application(JavaApp.class).start();
frame =WindowFinder.findFrame(new GenericTypeMatcher<JFrame>(JFrame.class) {
protected boolean isMatching(JFrame frame) {
return "Java Application".equals(frame.getTitle()) && frame.isShowing();
}
}).using(robot());
}
@Test
public void testMainFrame(){
assertNotNull(frame);
}
@Test
public void testInnerPanel(){
JPanelFixture jpf=frame.panel("inner_panel");
assertNotNull(jpf);
}
@Test
public void testButton(){
JButtonFixture jbf=frame.button("button");
assertNotNull(jbf);
}
@Test
public void testTextField(){
JTextComponentFixture jtf=frame.textBox("textfield");
assertNotNull(jtf);
}
@Test
public void testClickButton(){
JButtonFixture jbf=frame.button("button");
jbf.click();
JTextComponentFixture jtf=frame.textBox("textfield").requireText("eingabe");
}
}
Eigendlich funktioniert es genau so wie auf der http://docs.codehaus.org/pages/viewp...geId=117900196-Seite beschreiben. Mein Problem lag wohl im GenericTypeMatcher. So funktioniert es jedenfalls.
Der Frame wird hier über den Titel identifiziert. Alle anderen Komponenten werden über den Componentnamen gefunden.
Hier noch die verwendeten Liraries:
debug-1.0.jar
fest-assert-1.1.jar
fest-reflect-1.1.jar
fest-swing-1.2a3-sources.jar
fest-swing-1.2a3.jar
fest-swing-junit-1.2a3-sources.jar
fest-swing-junit-1.2a3.jar
fest-swing-junit-4.5-1.2a3-sources.jar
fest-swing-junit-4.5-1.2a3.jar
fest-util-1.1-sources.jar
fest-util-1.1.jar
jcip-annotations-1.0.jar
Lesezeichen