当前位置: 首页 > 知识库问答 >
问题:

AssertJ Swing的设置-测试GUI

陆沈浪
2023-03-14

我试图测试银行系统应用程序的GUI,但在TestLogin类中,我出现了一个错误“无法解析构造函数”FrameFixture(GUI.Login)”。我试图在Login类中扩展SampleFrame类,但IntelliJ找不到依赖项。我能做些什么来解决这个问题?

public class TestLogin {

    protected FrameFixture window;

    @BeforeClass
    public static void setUpOnce() {
        FailOnThreadViolationRepaintManager.install();
    }

    @Before
    public void setUp() {
        Login frame = GuiActionRunner.execute(() -> new Login());
        window = new FrameFixture(frame); //Cannot resolve constructor 'FrameFixture(GUI.Login)
        window.show();
    }

    @Test
    public void test() {}

    @After
    public void tearDown() {
        window.cleanUp();
    }
}

这里是登录类:

package GUI;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Login{

    public JFrame frame;
    private JTextField textField;
    private JPasswordField textField_1;

    /**
     * Create the application.
     */

    public Login() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */

    private void initialize() {
        
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Banking System");
        frame.getContentPane().setLayout(null);
        
        JLabel label = new JLabel("Banking System");
        label.setFont(new Font("Tahoma", Font.BOLD, 17));
        label.setBounds(147, 11, 151, 41);
        frame.getContentPane().add(label);
        
        JLabel lblLoginScreen = new JLabel("Login Screen");
        lblLoginScreen.setFont(new Font("Tahoma", Font.PLAIN, 13));
        lblLoginScreen.setBounds(170, 63, 101, 23);
        frame.getContentPane().add(lblLoginScreen);
        
        JLabel lblUsername = new JLabel("Username:");
        lblUsername.setFont(new Font("Tahoma", Font.PLAIN, 12));
        lblUsername.setBounds(55, 119, 64, 23);
        frame.getContentPane().add(lblUsername);
        
        JLabel lblPassword = new JLabel("Password:");
        lblPassword.setFont(new Font("Tahoma", Font.PLAIN, 12));
        lblPassword.setBounds(55, 159, 64, 23);
        frame.getContentPane().add(lblPassword);
        
        textField = new JTextField();
        textField.setBounds(130, 121, 86, 20);
        frame.getContentPane().add(textField);
        textField.setColumns(10);
        textField.setText("admin");
        
        textField_1 = new JPasswordField();
        textField_1.setBounds(130, 161, 86, 20);
        frame.getContentPane().add(textField_1);
        textField_1.setColumns(10);
        
        JButton btnLogin = new JButton("Login");
        btnLogin.addActionListener(new ActionListener() {
            @SuppressWarnings("deprecation")
            public void actionPerformed(ActionEvent e) {
                String user,pass;
                textField.setText("admin");
                user="admin";
                pass=textField_1.getText();
                if((user.equals("admin")&&(pass.equals("admin"))))
                        {
                            JOptionPane.showMessageDialog(frame.getComponent(0), "Login Successfully");
                            frame.setVisible(false);
                            
                            GUIForm.menu.setVisible(true);
                            
                        }
                else
                {
                    JOptionPane.showMessageDialog(frame.getComponent(0), "Login Failed");
                }
            }
        });
        btnLogin.setBounds(260, 138, 89, 23);
        frame.getContentPane().add(btnLogin);
    }
}

共有1个答案

俞学
2023-03-14

尝试

public class TestLogin extends AssertJSwingJUnitTestCase {

    private FrameFixture window;
    @Override
    protected void onSetUp() {
        Login frame = GuiActionRunner.execute(() -> new Login());
        window = new FrameFixture(robot(), frame);
        window.show();
    }

    @Test
    public void test(){
    }

    @Override
    protected void onTearDown () {
        window.cleanUp();
    }
}

在登录类中添加

public class Login extends JFrame
 类似资料:
  • Appium 给用户提供了在一个机器上启动多个 Android sessions 的方案。该方案只需要通过不同参数来启动的多个 Appium 服务。 以下是启动多个 Android 会话的一些重要参数: -p Appium 主要端口 -U 设备 id -bp Appium bootstrap 端口 --chromedriver-port chromedriver 端口 (若是在使用 webview

  • 通过导出一个接受Karma将要使用的配置对象的函数,可以将配置文件放在一起。 修改此对象的某些属性将告诉Karma我们想要做什么。 让我们来看一下在这个配置文件中使用的一些关键属性: 'jasmine', ], frameworks是我们要使用的测试框架的列表。这些框架必须通过NPM作为依赖项安装在我们的项目中,或/和作为Karma插件。 插件 plugins: [ 'karma-jasm

  • 如果你遵循 的例子,并使用文件来指定你的项目测试需求,记住你还需要添加节点类型到你的依赖项。

  • 我需要进行测试前配置,在运行XCUITest(自动化测试)用例之前进行一次设置, 测试前设置示例:(测试周期需要做一次,以下API的输出用于所有测试用例) 提取访问令牌 从远程配置文件提取URL。 从文档中,我发现协议的方法是进行预测试设置的理想场所。 但是方法没有被调用或执行,下面列出的的所有方法都被正确执行。 我尝试在UITest中设置但没有成功,它显示以下错误 如何执行方法?如有任何帮助,我

  • Yii 2 官方兼容 Codeception 测试框架, 你可以创建以下类型的测试: 单元测试 - 验证一个独立的代码单元是否按照期望的方式运行; 功能测试 - 在浏览器模拟器中以用户视角来验证期望的场景是否发生 验收测试 - 在真实的浏览器中以用户视角验证期望的场景是否发生。 Yii 为包括 yii2-basic 和 yii2-advanced 在内的应用模板脚手架提供全部三种类型的即用测试套件