Java 使用Gitlab CI和Junit测试mediaplayer
我目前正在为一个可以加载视频并播放/暂停视频的应用程序编写测试。我们使用maven作为构建框架,junit作为测试框架。测试代码如下所示:Java 使用Gitlab CI和Junit测试mediaplayer,java,maven,junit,gitlab,Java,Maven,Junit,Gitlab,我目前正在为一个可以加载视频并播放/暂停视频的应用程序编写测试。我们使用maven作为构建框架,junit作为测试框架。测试代码如下所示: public class UnitTest extends ApplicationTest { private MediaPlayer mediaPlayer1; @FXML private MediaView mediaView1; @FXML private Button playPauseButton; private sta
public class UnitTest extends ApplicationTest {
private MediaPlayer mediaPlayer1;
@FXML
private MediaView mediaView1;
@FXML
private Button playPauseButton;
private static Media media;
@Override
public void start(Stage stage) throws Exception {
try {
Parent root = FXMLLoader.load(getClass().getResource("videoMain.fxml"));
stage.setTitle("Vorprojekt");
Scene scene = new Scene(root, 1300, 900);
stage.setScene(scene);
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
@Before
public void setup() throws Exception {
try {
media = new Media(getClass().getResource("small.mp4").toString());
mediaPlayer1 = new MediaPlayer(media);
mediaView1 = find("#mediaView1");
mediaView1.setMediaPlayer(mediaPlayer1);
playPauseButton = find("#playPauseButton");
} catch (Exception e) {
}
}
@After
public void tearDown() {
}
@Test
public void playPauseButtonTest() {
mediaPlayer1.play();
clickOn(playPauseButton);
try {
assertTrue(mediaPlayer1.getStatus().equals(Status.PAUSED));
} catch (AssertionError ae) {
fail("Status should be paused but is " + mediaPlayer1.getStatus());
}
}
}
maven_build:
image: tomsontom/oracle-java8-mvn
script:
- cd Code
- apt-get update && apt-get upgrade -y
- DEBIAN_FRONTEND=noninteractive apt-get install openjfx xserver-xorg- video-dummy xinit fonts-freefont-ttf libavformat-ffmpeg56 wget libswt-gtk-3-java firefox -y
- wget https://raw.githubusercontent.com/thewtex/docker-opengl/master/etc/X11/xorg.conf -O /etc/X11/xorg.conf
- xinit -- :0 -nolisten tcp vt$XDG_VTNR -noreset +extension GLX +extension RANDR +extension RENDER +extension XFIXES &
- DISPLAY=:0 mvn --batch-mode package
- cd target && ls -la
如果我在我的设备上本地运行该测试,它运行时不会出现任何问题。但如果在Gitlab CI上运行它,则会引发以下错误:
[信息]正在运行UnitTest[错误]测试运行:1,失败:1,错误:0,
跳过:0,经过的时间:1.776秒解决方案:
有两个问题我们没有处理。首先,虚拟监视器的大小定义为1366x768,而用户界面的大小初始化为1300x900。因此,无法访问播放/暂停按钮。
第二个错误是,mediaplayer需要更多的时间在运行程序中初始化。因此,在mediaplayer初始化之后,在状态应该切换为playing之后,需要一个循环来等待mediaplayer进行切换。以下设置方法为我们解决了问题:
@Before
public void setup() throws Exception {
media = new Media(getClass().getResource("small.mp4").toString());
mediaPlayer1 = new MediaPlayer(media);
mediaPlayer1.setOnError(() -> fail("media error" + mediaPlayer1.getError().toString()));
int retries = 0;
while (mediaPlayer1.getStatus() != MediaPlayer.Status.READY) {
System.out
.println("media player not yet READY - current status: " + mediaPlayer1.getStatus());
sleep(100);
retries++;
if (retries > 10) {
fail("waited too long for media player to get READY");
}
}
mediaView1 = find("#mediaView1");
mediaView1.setMediaPlayer(mediaPlayer1);
mediaPlayer1.play();
retries = 0;
while (mediaPlayer1.getStatus() != MediaPlayer.Status.PLAYING) {
System.out
.println("media player not yet PLAYING - current status: " + mediaPlayer1.getStatus());
sleep(100);
retries++;
if (retries > 10) {
fail("waited too long for media player to get PLAYING");
}
}
}
需要这个gitlab ci:
maven_build:
image: tomsontom/oracle-java8-mvn
script:
- cd Code
- apt-get update && apt-get upgrade -y
- DEBIAN_FRONTEND=noninteractive apt-get install openjfx xserver-xorg-video-dummy xserver-xorg-input-void xinit fonts-freefont-ttf pulseaudio pulseaudio-utils libavformat-ffmpeg56 wget libswt-gtk-3-java firefox -y
- wget https://xpra.org/xorg.conf -O /etc/X11/xorg.conf
- service dbus start
- xinit -- :0 -nolisten tcp vt$XDG_VTNR -noreset +extension GLX +extension RANDR +extension RENDER +extension XFIXES &
- DISPLAY=:0 pulseaudio --exit-idle-time=-1 &
- DISPLAY=:0 mvn --batch-mode package
- cd target && ls -la
解决方案:
有两个问题我们没有处理。首先,虚拟监视器的大小定义为1366x768,而用户界面的大小初始化为1300x900。因此,无法访问播放/暂停按钮。
第二个错误是,mediaplayer需要更多的时间在运行程序中初始化。因此,在mediaplayer初始化之后,在状态应该切换为playing之后,需要一个循环来等待mediaplayer进行切换。以下设置方法为我们解决了问题:
@Before
public void setup() throws Exception {
media = new Media(getClass().getResource("small.mp4").toString());
mediaPlayer1 = new MediaPlayer(media);
mediaPlayer1.setOnError(() -> fail("media error" + mediaPlayer1.getError().toString()));
int retries = 0;
while (mediaPlayer1.getStatus() != MediaPlayer.Status.READY) {
System.out
.println("media player not yet READY - current status: " + mediaPlayer1.getStatus());
sleep(100);
retries++;
if (retries > 10) {
fail("waited too long for media player to get READY");
}
}
mediaView1 = find("#mediaView1");
mediaView1.setMediaPlayer(mediaPlayer1);
mediaPlayer1.play();
retries = 0;
while (mediaPlayer1.getStatus() != MediaPlayer.Status.PLAYING) {
System.out
.println("media player not yet PLAYING - current status: " + mediaPlayer1.getStatus());
sleep(100);
retries++;
if (retries > 10) {
fail("waited too long for media player to get PLAYING");
}
}
}
需要这个gitlab ci:
maven_build:
image: tomsontom/oracle-java8-mvn
script:
- cd Code
- apt-get update && apt-get upgrade -y
- DEBIAN_FRONTEND=noninteractive apt-get install openjfx xserver-xorg-video-dummy xserver-xorg-input-void xinit fonts-freefont-ttf pulseaudio pulseaudio-utils libavformat-ffmpeg56 wget libswt-gtk-3-java firefox -y
- wget https://xpra.org/xorg.conf -O /etc/X11/xorg.conf
- service dbus start
- xinit -- :0 -nolisten tcp vt$XDG_VTNR -noreset +extension GLX +extension RANDR +extension RENDER +extension XFIXES &
- DISPLAY=:0 pulseaudio --exit-idle-time=-1 &
- DISPLAY=:0 mvn --batch-mode package
- cd target && ls -la