0

我将测试更改为 TestFx,但问题仍然存在。

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/ILAreaManagement/ILArea.fxml"));
        Parent root = fxmlLoader.load();

        MaintenanceController maintenanceController = fxmlLoader.getController();

        Platform.runLater(() ->{
            try {
                maintenanceController.initialize(maintenanceAreaObjectObservableList);
            } catch (Exception e) {

当涉及到 setTitle 方法时,它给出了

java.lang.NoSuchMethodError: gov.tubitak.ys03.sysmaintenance.utilities.BorderedTitledPane.setTitle(Ljava/lang/String;)V

((BorderedTitledPane)ILAreaPane).setTitle("IL 区域");

public class BorderedTitledPane extends StackPane {

    Label title = new Label(" ");

    public BorderedTitledPane(Node content) {
        StackPane contentPane = new StackPane();
        content.getStyleClass().add("bordered-titled-content");
        contentPane.getChildren().add(content);

        getStyleClass().add("bordered-titled-border");
        getChildren().addAll(title, contentPane);
    }

    public void setTitle(String title) {
        this.title.setText(title);
        this.title.getStyleClass().add("bordered-titled-title");
        StackPane.setAlignment(this.title, Pos.TOP_CENTER);
    }

}

我将 setTitle 更改为 public Label getTitle(){return title;} 但我得到与 Ljavafx/scene/control/Label 相同的错误。我不明白异常的原因。

4

2 回答 2

0

例外是关于 BorderedTitlePane 类。我改变了它,我的测试通过了。我想分享更改后的 BorderedTitlePane 类:

@jewelsea 编写的 BorderedTitlePane 类。当标题必须更改时,我更改了它以设置标题。但我必须使用 StringProperty。

public class BorderedTitledPane extends StackPane {

    private StringProperty title = new SimpleStringProperty();

    public BorderedTitledPane(String titleString, Node content) {
        final Label titleLabel = new Label();
        titleLabel.textProperty().bind(Bindings.concat(title, ""));
        titleLabel.getStyleClass().add("bordered-titled-title");
        title.set(titleString);
        StackPane.setAlignment(titleLabel, Pos.TOP_CENTER);

        StackPane contentPane = new StackPane();
        content.getStyleClass().add("bordered-titled-content");
        contentPane.getChildren().add(content);

        getStyleClass().add("bordered-titled-border");
        getChildren().addAll(titleLabel, contentPane);
    }

    public String getTitle(){
        return title.get();
    }

    public StringProperty getTitleStringProperty(){
        return title;
    }

    public void setTitle(String title){
        this.title.set(title);
    }

}
于 2017-12-21T09:01:57.263 回答
0

如果您无法进行任何重构兼容性表和 wiki ,则需要使用 Powermock 。

然后您需要设置您的测试,以便在创建新的 Label() 时,使用实际的模拟来代替。标签不是最终的,因此您可以轻松地模拟它:

@PrepareForTest(Label.class)
@RunWith(PowerMockRunner.class)
public class MyTest{

    @Test
    public void init() throws Exception {
        Label labelMock = Mockito.mock(Label.class);
        PowerMockito.whenNew(Label.class)
            .withNoArguments().thenReturn(labelMock);

        // rest of your test
        ....
    }
于 2017-12-19T09:19:33.730 回答