现在我一直在维护第二个沙箱项目,我在那里测试概念并解决障碍。但这并不是非常有效,因为我最终不得不复制大量代码而且无法为我的游戏维护一套持久的回归测试。
我的项目中确实有一个单元测试文件夹,但是不可能测试框架本身的组件,因为它们依赖于特定于平台的实现,而这些实现是开发发生的核心分支所无法实现的。
我找到了PlayN框架的set of tests。是否有可能利用这些来测试自己的项目?是否可以在一个项目中包含两个Game类?
我看到这个问题被提出here,但它从未真正得到满意的答复。
答案 0 :(得分:4)
您无法轻松编写针对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)构建服务器上运行单元测试,则需要确保构建服务器与Mesa GL库一起安装了无头X windows安装。