JavaFX で Spring Boot を使用してテストしています (これを説明するいくつかの優れた YouTube ビデオに基づいています)。
TestFXで動作させるには、次のようなコンテキストを作成する必要があります。
@Override
public void init() throws Exception {
SpringApplicationBuilder builder = new SpringApplicationBuilder(MyJavaFXApplication.class);
builder.headless(false); // Needed for TestFX
context = builder.run(getParameters().getRaw().stream().toArray(String[]::new));
FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setControllerFactory(context::getBean);
rootNode = loader.load();
}
私は今、この JavaFX アプリケーションをテストしたいと思っています。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MyJavaFXApplicationUITest extends TestFXBase {
@MockBean
private MachineService machineService;
@Test
public void test() throws InterruptedException {
WaitForAsyncUtils.waitForFxEvents();
verifyThat("#statusText", (Text text ) -> text.getText().equals("Machine stopped"));
clickOn("#startMachineButton");
verifyThat("#startMachineButton", Node::isDisabled);
verifyThat("#statusText", (Text text ) -> text.getText().equals("Machine started"));
}
}
これにより、Spring コンテキストが開始され、期待どおりに「通常の」Bean がモック Bean に置き換えられます。
ただし、java.awt.HeadlessException
通常の起動時に行われるように、この「ヘッドレス」プロパティが false に設定されていないため、 が表示されます。テスト中にこのプロパティを設定するにはどうすればよいですか?
編集:
よく見ると、Spring テスト フレームワークが開始するコンテキストと、init
メソッドで手動で作成するコンテキストの 2 つのコンテキストが開始されているように見えるため、テスト対象のアプリケーションはモック Bean を使用していません。メソッドでテスト コンテキストの参照を取得する方法を誰かが知っていれば、init()
とてもうれしいです。