使用Cucumber的AssertJ Swing测试

时间:2019-06-02 13:13:35

标签: java swing cucumber assertj

我有一个简单的单元测试,以确保应用程序的主窗口是正确的:

public class MainWindowUT extends AbstractMainWindowTest {

    @Test
    public void whenApplicationIsStarted_thenMainFrameIsUndecorated() {
        @SuppressWarnings("boxing")
        Boolean isUndecorated = GuiActionRunner.execute(() -> window.target().isUndecorated());
        assertThat(isUndecorated).isTrue();
    }
}

AbstractMainWindowTest是:

public abstract class AbstractMainWindowTest extends AssertJSwingJUnitTestCase {

    protected FrameFixture window;

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

ScaleRuler是我的框架,目前什么都不做,只需setUndecorated(true)。测试运行正常。 如何从Cucumber执行相同的测试?

public final class WindowAspectSteps {

    @Then("the main window should be undecorated")
    public void checkMainWindowIsUndecorated() {
        //????
    }
}

我试图使WindowAspectSteps扩展AbstractMainWindowTest,但是window变量保持为空。

1 个答案:

答案 0 :(得分:1)

JUnit(@Before)的@org.junit.Before注释不适用于Cucumber。
黄瓜的own @Before annotation@cucumber.api.java.Before):

实际上,JUnit和Cucumber实际上是两个截然不同的测试运行器平台,因此也具有自己的测试运行器和关联的工具(尽管有些在逻辑上很常见)。

作为一种解决方法,请尝试在测试抽象类的设置方法上添加2个不同的@Before注释(junit和黄瓜的注释),或创建两个不同的方法:一个使用@cucumber.api.java.Before,另一个使用{ {1}}都委托给执行设置处理的通用方法。