java - 使用 Gitlab CI 和 Junit 测试媒体播放器

标签 java maven junit gitlab

我目前正在为一个可以加载视频并播放/暂停视频的应用程序编写测试。我们使用 Maven 作为构建框架,使用 junit 作为测试框架。测试代码如下所示:

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());
    }

  }
}

如果我在我的设备上本地运行该测试,则运行不会出现任何问题。但是如果我在我的 Gitlab CI 上运行它,则会抛出以下错误:

[INFO] Running UnitTest [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.776 s <<< FAILURE! - in UnitTest [ERROR] playPauseButtonTest(UnitTest) Time elapsed: 1.772 s <<< FAILURE! java.lang.AssertionError: Status should be paused but is HALTED at UnitTest.playPauseButtonTest(UnitTest.java:65)

[INFO] [INFO] Results: [INFO] [ERROR] Failures: [ERROR]
UnitTest.playPauseButtonTest:65 Status should be paused but is HALTED [INFO] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 [INFO] [ERROR] There are test failures.

Please refer to /builds/swp18/tj18a/Code/target/surefire-reports for the individual test results. Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.

我的 .gitlab-ci.yml 看起来像这样:

 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 中运行吗?

我很感激每一个提示,因为我不知道如何解决它。

如果您有兴趣,这是我的 pom.xml 的重要部分。

      <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <testFailureIgnore>true</testFailureIgnore>
       </configuration>
       <version>3.0.0-M3</version>
       <dependencies>
         <dependency>
           <groupId>org.apache.maven.surefire</groupId>
           <artifactId>surefire-junit47</artifactId>
           <version>3.0.0-M3</version>
         </dependency>
       </dependencies>
     </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.8.0</version>
       <configuration>
         <source>8</source>
         <target>8</target>
       </configuration>
     </plugin>

最佳答案

解决方案: 有两个问题我们没有处理。首先,虚拟显示器的尺寸定义为1366x768,而用户界面的初始化尺寸为1300x900。因此无法触及播放/暂停按钮。 第二个错误是,媒体播放器需要更多时间在运行程序中进行初始化。所以在媒体播放器初始化之后,状态应该切换到正在播放之后,需要一个循环来等待媒体播放器切换。以下设置方法为我们解决了这个问题:

  @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 

关于java - 使用 Gitlab CI 和 Junit 测试媒体播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929987/

相关文章:

java - 无法从网络服务下载 xlsx

spring - Maven 依赖 - org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties 上的 NoSuchMethodError

java - 如何在不默认使用 Maven 的情况下在 Netbeans 中创建 Java 项目?

java - 如何使用 Maven 运行特定包中的所有测试?

java - Java 独立项目 VSCode 中显示无法识别的选项 : -ea, --enable-preview 错误

java - Spring-boot - 参数化测试 - 访问MethodSource中的Application.properties

java - Hibernate 中 key '0' 的重复条目 'PRIMARY'

java - jsp更新表中的多行

java - 使用字符检查二维数组中的某些单词(作业)

java - 如何将具有所有依赖项的 Netbeans maven 项目移动到其他计算机