【问题标题】:@Test Annotiation not working with TestFX@Test 注释不适用于 TestFX
【发布时间】:2015-02-19 15:23:02
【问题描述】:

我正在尝试在我的项目中实现 TextFX 以进行一些 UI 测试。但是,我似乎无法让它正常工作。我已将 jar 从 http://search.maven.org/#search%7Cga%7C1%7Ctestfx 下载到我系统上名为“TestFX-3.1.2”的文件夹中。

之后,我在 Netbeans8 中创建了一个指向这些 jar 文件(jar、源代码和 javadoc)的新库。作为测试,我创建了一个简单的 Java FXML 项目,并添加了新库。

public class Test2 extends Application {

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

接下来,我有一个用于我的 FXML 文件的控制器,其中包含以下生成的代码:

public class FXMLDocumentController implements Initializable {

@FXML
private Label label;

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");
    label.setText("Hello World!");
}

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}    

}

为了实现 TestFX 端,我创建了一个扩展 GuiTest 的新类:

package test2;

import java.io.IOException;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import org.loadui.testfx.GuiTest;


public class TestTheThing extends GuiTest {

    @Override
    protected Parent getRootNode() {
        FXMLLoader loader = new FXMLLoader();
        Parent node = null;
        try {
            node = loader.load(this.getClass().getResource("FXMLDocument.fxml").openStream());
        } catch (IOException e) {
            System.out.println(e.toString());    
        }
        return node;
    }

    @Test //<-- this Annotiation does not work
    public void pressTheButton(){
        //TODO
    }
}

正如上面代码中所说,@Test 根本不起作用,并带有红色下划线并带有警告“找不到符号”。谁能指出我做错了什么的正确方向?

【问题讨论】:

  • 你可能对 jar 依赖有问题。你在使用 maven 吗?你的项目有 .pom 吗?
  • 不,我不使用 Maven,这就是为什么我只是下载了这些 jars,希望它能正常工作。

标签: java netbeans javafx-2 javafx-8 testfx


【解决方案1】:

根据https://repo1.maven.org/maven2/org/loadui/testFx/3.1.2/testFx-3.1.2.pom,testFx 有几个依赖项(guava、junit、hamcrest-all、hamcrest-core)。要正常工作,您需要将与这些依赖项对应的 jar 添加到您的项目中。但是,为此推荐使用 maven。

【讨论】:

  • 嗯是的,但这不是问题,@Test 仍然无法识别
【解决方案2】:

不要直接在测试类中加载您的 fxml 文件,因为它可能不会有意工作。而是以这种方式启动主类:

FXTestUtils.launchApp(Test2.class);
Thread.sleep(2000);

controller = new GuiTest()
    {
        @Override
        protected Parent getRootNode()
        {
            return Test2.getStage().getScene().getRoot();
        }
    };

在返回舞台的Test2 类中创建static 方法getStage()。上面的代码应该驻留在测试类中用@BeforeClass 注释的方法中。控制器是对 GuiTest 的静态引用。

最后你的测试类应该是这样的:

import java.io.IOException;

import javafx.scene.Parent;

import org.loadui.testfx.GuiTest;
import org.loadui.testfx.utils.FXTestUtils;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class TestTheThing
{
    public static GuiTest controller;

@BeforeClass
public static void setUpClass() throws InterruptedException, IOException
{
    FXTestUtils.launchApp(Test2.class);
    Thread.sleep(2000);
    controller = new GuiTest()
    {
        @Override
        protected Parent getRootNode()
        {
            return Test2.getStage().getScene().getRoot();
        }
    };  
}

@Test
public void testCase()
{
    System.out.println("in a test method");
}
}

在这种情况下,您不需要从 GuiTest 扩展。并且,不要忘记在 Test2 类中创建 static getStage()。希望这会有所帮助。这在我的情况下工作正常。

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 2021-11-06
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多