我有一个简单的单元测试,以确保应用程序的主窗口是正确的:
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变量保持为空。
答案 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}}都委托给执行设置处理的通用方法。