当前位置: 首页 > 知识库问答 >
问题:

使用maven时无法读取图像

万高洁
2023-03-14

我目前正在为我正在制作的一款游戏进行单元测试,但在maven身上遇到了一个奇怪的错误,我无法理解。

我已经运行了mvn清洁,现在我的测试失败了。

以下是我在运行mvn测试-X时遇到的错误:

[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[DEBUG] Determined Maven Process ID 15842
[DEBUG] boot classpath:  /home/coseto/.m2/repository/org/apache/maven/surefire/surefire-booter/2.22.1/surefire-booter-2.22.1.jar  /home/coseto/.m2/repository/org/apache/maven/surefire/surefire-api/2.22.1/surefire-api-2.22.1.jar  /home/coseto/.m2/repository/org/apache/maven/surefire/surefire-logger-api/2.22.1/surefire-logger-api-2.22.1.jar  /home/coseto/CMPT276/project/project/target/test-classes  /home/coseto/CMPT276/project/project/target/classes  /home/coseto/.m2/repository/junit/junit/4.11/junit-4.11.jar  /home/coseto/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar  /home/coseto/.m2/repository/org/openjfx/javafx-controls/16/javafx-controls-16.jar  /home/coseto/.m2/repository/org/openjfx/javafx-controls/16/javafx-controls-16-linux.jar  /home/coseto/.m2/repository/org/openjfx/javafx-graphics/16/javafx-graphics-16.jar  /home/coseto/.m2/repository/org/openjfx/javafx-graphics/16/javafx-graphics-16-linux.jar  /home/coseto/.m2/repository/org/openjfx/javafx-base/16/javafx-base-16.jar  /home/coseto/.m2/repository/org/openjfx/javafx-base/16/javafx-base-16-linux.jar  /home/coseto/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.22.1/surefire-junit4-2.22.1.jar
[DEBUG] boot(compact) classpath:  surefire-booter-2.22.1.jar  surefire-api-2.22.1.jar  surefire-logger-api-2.22.1.jar  test-classes  classes  junit-4.11.jar  hamcrest-core-1.3.jar  javafx-controls-16.jar  javafx-controls-16-linux.jar  javafx-graphics-16.jar  javafx-graphics-16-linux.jar  javafx-base-16.jar  javafx-base-16-linux.jar  surefire-junit4-2.22.1.jar
[DEBUG] Forking command line: /bin/sh -c cd /home/coseto/CMPT276/project/project && /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar /home/coseto/CMPT276/project/project/target/surefire/surefirebooter11758842836664561521.jar /home/coseto/CMPT276/project/project/target/surefire 2021-12-02T21-14-55_342-jvmRun1 surefire9176235482268566905tmp surefire_012726690917142737821tmp
[INFO] Running G20.CollisionScoreIntegrationTest
[ERROR] Tests run: 4, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 0.315 s <<< FAILURE! - in G20.CollisionScoreIntegrationTest
[ERROR] collidingWithOptionalReward(G20.CollisionScoreIntegrationTest)  Time elapsed: 0.289 s  <<< ERROR!
java.lang.IllegalArgumentException: input == null!
        at G20.CollisionScoreIntegrationTest.setup(CollisionScoreIntegrationTest.java:24)

[ERROR] collidingWithReward(G20.CollisionScoreIntegrationTest)  Time elapsed: 0 s  <<< ERROR!
java.lang.IllegalArgumentException: input == null!
        at G20.CollisionScoreIntegrationTest.setup(CollisionScoreIntegrationTest.java:24)

[ERROR] collidingWithAllThree(G20.CollisionScoreIntegrationTest)  Time elapsed: 0.001 s  <<< ERROR!
java.lang.IllegalArgumentException: input == null!
        at G20.CollisionScoreIntegrationTest.setup(CollisionScoreIntegrationTest.java:24)

[ERROR] collidingWithPunishment(G20.CollisionScoreIntegrationTest)  Time elapsed: 0 s  <<< ERROR!
java.lang.IllegalArgumentException: input == null!
        at G20.CollisionScoreIntegrationTest.setup(CollisionScoreIntegrationTest.java:24)

[INFO] Running G20.movementListenerTest
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.089 s - in G20.movementListenerTest
[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR]   CollisionScoreIntegrationTest.setup:24 » IllegalArgument input == null!
[ERROR]   CollisionScoreIntegrationTest.setup:24 » IllegalArgument input == null!
[ERROR]   CollisionScoreIntegrationTest.setup:24 » IllegalArgument input == null!
[ERROR]   CollisionScoreIntegrationTest.setup:24 » IllegalArgument input == null!
[INFO]
[ERROR] Tests run: 9, Failures: 0, Errors: 4, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.746 s
[INFO] Finished at: 2021-12-02T21:14:56-08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project project: There are test failures.
[ERROR]
[ERROR] Please refer to /home/coseto/CMPT276/project/project/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project project: There are test failures.

Please refer to /home/coseto/CMPT276/project/project/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.
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.

Please refer to /home/coseto/CMPT276/project/project/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.
    at org.apache.maven.plugin.surefire.SurefireHelper.throwException (SurefireHelper.java:289)
    at org.apache.maven.plugin.surefire.SurefireHelper.reportExecution (SurefireHelper.java:161)
    at org.apache.maven.plugin.surefire.SurefirePlugin.handleSummary (SurefirePlugin.java:364)
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked (AbstractSurefireMojo.java:1041)
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute (AbstractSurefireMojo.java:857)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

这是我的Maven文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>G20</groupId>
  <artifactId>project</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>project</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <javafx.version>16</javafx.version>
    <javafx.maven.plugin.version>0.0.6</javafx.maven.plugin.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>${javafx.version}</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <goals>
                    <goal>java</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <mainClass>G20.Main</mainClass>
        </configuration>
      </plugin>
        <plugin>
          <groupId>org.openjfx</groupId>
          <artifactId>javafx-maven-plugin</artifactId>
          <version>0.0.8</version>
          <configuration>
            <mainClass>G20.Main</mainClass>
          </configuration>
        </plugin>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

这是JUnit测试的代码:

package G20;
import org.junit.*;

import G20.Listener;

import java.util.ArrayList;

import static org.junit.Assert.*;

public class CollisionScoreIntegrationTest {
    CollisionHandler handler;
    Player player;
    Exit exit;
    ArrayList<Punishment> punishments;
    ArrayList<OptionalReward> optional_rewards;
    ArrayList<Enemy> enemies;
    ArrayList<Reward> rewards;

    /**
     * To be done before every test. Creates a new player to be tested on for each test
     */
    @Before
    public void setup(){
        player = new Player(0,0);
    }

    /**
     * Tests if the players score is updated by + 10 when it collides with a reward.
     */
    @Test
    public void collidingWithReward(){
        //generating empty arraylist + dummy values for the collision handler's constructor
        rewards = new ArrayList<Reward>();
        punishments= new ArrayList<Punishment>();
        optional_rewards = new ArrayList<OptionalReward>();
        enemies = new ArrayList<Enemy>();
        exit = new Exit(111,111);
        //adding the reward we want to test collision with in the rewards arraylist
        rewards.add(new Reward(32,0));
        handler = new CollisionHandler(player, enemies, rewards, optional_rewards, punishments, exit);
        handler.handleCollisions();
        assertEquals(10, player.getScore());    
    }

    /**
     * Tests if the players score is updated by -11 when it collides with a reward
     */
    @Test
    public void collidingWithPunishment(){
        //generating empty arraylist + dummy values for the collision handler's constructor
        rewards = new ArrayList<Reward>();
        punishments= new ArrayList<Punishment>();
        optional_rewards = new ArrayList<OptionalReward>();
        enemies = new ArrayList<Enemy>();
        exit = new Exit(111,111);
        //adding the punishment we want to test collision with in the punishments arraylist
        punishments.add(new Punishment(32,0));
        handler = new CollisionHandler(player, enemies, rewards, optional_rewards, punishments, exit);
        handler.handleCollisions();
        assertEquals(-11, player.getScore());    
    }

    /**
     * Tests if the players score is updated by +25 when it collides with a optional reward
     */
    @Test
    public void collidingWithOptionalReward(){
        //generating empty arraylist + dummy values for the collision handler's constructor
        rewards = new ArrayList<Reward>();
        punishments= new ArrayList<Punishment>();
        optional_rewards = new ArrayList<OptionalReward>();
        enemies = new ArrayList<Enemy>();
        exit = new Exit(111,111);
        //adding the optional reward we want to test collision with in the optional rewards arraylist
        optional_rewards.add(new OptionalReward(32,0));
        //setting the collision to on because collision defaults to off for optional rewards
        optional_rewards.get(0).collision_on = true;
        handler = new CollisionHandler(player, enemies, rewards, optional_rewards, punishments, exit);
        handler.handleCollisions();
        assertEquals(25, player.getScore());    
    }

    /**
     * Tests if the players score is updated by +(25+10-11) when it collides with all 3 of the above entities
     */
    @Test
    public void collidingWithAllThree(){
        //generating empty arraylist + dummy values for the collision handler's constructor
        rewards = new ArrayList<Reward>();
        punishments= new ArrayList<Punishment>();
        optional_rewards = new ArrayList<OptionalReward>();
        enemies = new ArrayList<Enemy>();
        exit = new Exit(111,111);
        //adding all the score modifying entities that are being testing to their respective ArrayList
        optional_rewards.add(new OptionalReward(32,0));
        rewards.add(new Reward(-32, 0));
        punishments.add(new Punishment(0, 32));
        //setting the collision to on because collision defaults to off for optional rewards
        optional_rewards.get(0).collision_on = true;
        handler = new CollisionHandler(player, enemies, rewards, optional_rewards, punishments, exit);
        handler.handleCollisions();
        assertEquals(24, player.getScore());    
    }

}

下面是我得到错误的代码:

package G20;

import java.util.*;


import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
/**
 * The class for the Player
 */
public class Player extends AnimateEntity{
    
    /**
     * Constructor calls super constructor, sets sprites
     * @param x_pos
     * @param y_pos
     * @param sprites
     */
    public Player(int x_pos, int y_pos){
        super(x_pos, y_pos);
        //populating the sprite array list
        sprites = new ArrayList<BufferedImage>();
        try{
            sprites.add(ImageIO.read(getClass().getResourceAsStream("Sprites/player_1.png")));
            } catch(IOException e){
                e.printStackTrace();
            }
        try{
            sprites.add(ImageIO.read(getClass().getResourceAsStream("Sprites/player_2.png")));
            } catch(IOException e){
                e.printStackTrace();
            }
        setSprite(sprites.get(0));
        speed = 4;
    }
}

我很确定它与maven文件有关,但我不确定它是什么。也许是我正在使用的图像阅读库?任何帮助都将不胜感激。

共有1个答案

鲁单弓
2023-03-14

您遇到的问题是,您的测试无法实例化播放器(测试类的第24行)。在尝试时,它将无法找到sprite资源,如果它的基类AnimateEntity正在做额外的工作,则可能会出现其他失败。

理想情况下,您应该在测试用例中使用模拟对象。这样一来,他们就不依赖于可能可用或不可用的资源。

如果绝对需要执行测试所需的资源,则需要配置maven将其复制到目标文件夹,以便测试可以访问它们。

此链接提供有关如何设置项目以使用目标目录中的资源的信息。

在JUnit测试用例中找不到资源文件

 类似资料:
  • LiquiBase.Exception.SetupException:文件:/src/main/LiquiBase/changes/000-initial-schema.xml不存在 我的pom.xml插件配置如下: 我的Liquibase.properties文件是: 为什么Liquibase找不到那个文件?即使我将文件名更改为:000-initial-schematest.xml,错误也是:

  • 其中我指定了一个远程maven存储库: 在这个回购中,我部署了一个工件--实际上它是一个gradle插件。 现在我尝试使用下面的build.gradle文件构建另一个需要使用这个插件/工件的项目: 即使我有上面的settings.xml文件指向远程maven存储库,Gradle也找不到my-gradle-plugin。 如果我在build.gradle文件中指定存储库,它就会起作用: 根据本职位:

  • 我试图从__consumer_offsets主题中使用,因为这似乎是检索关于消费者的kafka度量(如消息滞后等)的最简单的方法。理想的方法是从jmx访问它,但希望先尝试一下,返回的消息似乎是加密的或不可读的。尝试添加stringDeserializer属性。有没有人对如何纠正这一点有什么建议?这里的提法也是重复的 重复的consumer_offset 没有帮助,因为它没有引用我的问题,即在Jav

  • 问题内容: 我已经编写了一个程序来加密Netbeans中的图像。从Netbeans运行时,该程序运行良好,但是当我将其构建为.jar文件时,即使我将图像文件与.jar文件放在同一文件夹中,它也无法读取图像。 //加密 //加载/写入图片 问题答案: 目前尚不清楚以下哪个触发您的错误。这个 将从当前目录读取,该目录不一定与您的jar文件所在的目录相同。 这个 将从类所在的jar文件中的目录中读取。请

  • 问题内容: 我正在从teamtreehouse.com制作一个非常基本的React应用程序,并且不断遇到 “ TypeError:无法读取未定义的属性’onPlayerScoreChange’” 即使我正确绑定了我的功能(我认为) 是组件中的一种方法,当用户单击“ +”或“-”按钮以更改玩家得分时执行。 如果有人可以解释什么地方出了错,那将非常有帮助,因为我认为我是在曾祖父母的构造函数中进行设置的

  • 问题内容: 我正在尝试从无头CMS(Sanity.io)返回一些数据,但是我的React一直遇到错误。我已遵循此示例,但是现在出现错误 我的密码 关于我在做什么错的任何想法吗? 问题答案: 渲染组件时,可以将country定义为未定义或为null。确保它在初始渲染时是数组: 或者, 您可以将地图用于这样的国家/地区: 这样可以确保仅在有国家/地区时才运行地图。