现在我一直在维护第二个沙盒项目,我在其中测试概念并解决障碍。但这并不是很有效,因为我最终不得不复制大量代码并且无法为我的游戏维护一组持久的回归测试。
我的项目中确实有一个单元测试文件夹,但是无法测试框架本身的组件,因为它们依赖于特定于平台的实现,而这些实现对进行开发的核心分支不可用。
我找到了 PlayN 框架的一组测试。是否可以利用这些来测试自己的项目?是否可以在一个项目中包含两个游戏类?
我看到这里提出了这个问题,但从未真正得到令人满意的答复。
您无法轻松编写针对 PlayN 支持的不同后端运行的单元测试。显然,在 Android 手机或 iOS 设备上自动运行单元测试将是一个相当大的挑战。但是,您可以非常轻松地编写针对 Java 后端运行的单元测试。
我通常构建我的项目,使我的核心子模块具有test
依赖关系play n-java
,然后我使用playn-java
后端运行我的单元测试。我发现它工作得相当好,虽然我通常不会测试很多直接与 PlayN 交互的东西,因为很难对可视代码进行单元测试。我单元测试的东西很少会调用 PlayN。
您还可以针对 HTML5 后端进行单元测试,但它确实很慢。看看HTMLUnit。
[编辑:由于我反复回答这个问题,我将在此处添加有关如何配置项目以针对 Java 后端运行单元测试的说明]
将 playn-java 添加到您core/pom.xml
的测试依赖项中:
<dependency>
<groupId>com.googlecode.playn</groupId>
<artifactId>playn-java</artifactId>
<version>${playn.version}</version>
<scope>test</scope>
</dependency>
将此添加到您的core/pom.xml
还:
<build>
<plugins>
<plugin>
<groupId>com.googlecode.mavennatives</groupId>
<artifactId>maven-nativedependencies-plugin</artifactId>
<version>0.0.6</version>
<executions>
<execution>
<id>unpacknatives</id>
<phase>generate-resources</phase>
<goals> <goal>copy</goal> </goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<argLine>-Djava.library.path=${basedir}/target/natives</argLine>
</configuration>
</plugin>
</plugins>
</build>
这将在运行单元测试时正确设置 LWJGL。
然后将其添加到您的单元测试中:
static {
JavaPlatform.register();
}
现在您可以PlayN.foo()
在单元测试中访问服务,它们甚至可以工作。
您可以像这样从 Maven 编译和运行测试:
mvn test
如果您需要在(Unix)构建服务器上运行单元测试,您需要确保构建服务器安装了无头 X Windows 安装以及 Mesa GL 库。