本文介紹了Github操作的Swing UI測試的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我使用AssertJ-Swing和JUnit5為我的Java應用程序進行了幾個UI測試。我在本地運行這些測試時沒有遇到任何問題,但一旦我將它們推入Github Actions上的持續集成,其中一些測試就會失敗。
.yml
如下所示:
...
jobs:
build:
runs-on: ubuntu-latest
env:
workdir: idTest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
run: >
xvfb-run mvn verify
working-directory: ${{ env.workdir }}
如您所見,我正在使用xvfb-run
無頭運行測試,對于我的簡單測試來說,這應該就足夠了。
由于未選擇項而導致(有時)失敗的愚蠢示例測試:
@Test
@GUITest
void test() {
Item item = new Item("name");
GuiActionRunner.execute(() -> view.getListModel().addElement(item));
window.list("list").selectItem(0);
window.list("list").requireSelectedItems(0);
}
奇怪的是,測試有時會通過,有時不會。按鈕上的click()
也會發生這種情況。
我還嘗試在Windows下(不需要xvfb
運行)在Github操作上運行測試,沒有任何問題,所以我猜xvfb
是這里的問題所在。
有人知道問題出在哪里嗎?如果有人有任何建議,我也愿意嘗試xvfb
以外的其他解決方案。謝謝。
推薦答案
原來在我的視圖類中有這樣的東西:
public class MyView extends JFrame{
private CardLayout layout;
private JPanel myPane;
public MyView() {
setResizable(false);
setTitle("View");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
layout = new CardLayout();
getContentPane().setLayout(layout);
myPane = new JPanel();
getContentPane().add(myPane, "pane");
layout.show(getContentPane(), "layout");
pack();
setLocationRelativeTo(null);
}
}
刪除最后三行為我修復了它。我想他們是在干擾xvfb
。而且,它們似乎不會給代碼本身增加任何價值,刪除它們是安全的。
這篇關于Github操作的Swing UI測試的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,