Я создал тест, который расширяет GWTTestCase, но я получаю эту ошибку:
mvn integration-test gwt:test
...
Running com.myproject.test.ui.GwtTestMyFirstTestCase
Translatable source found in...
[WARN] No source path entries; expect subsequent failures
[ERROR] Unable to find type 'java.lang.Object'
[ERROR] Hint: Check that your module inherits 'com.google.gwt.core.Core' either directly or indirectly (most often by inheriting module 'com.google.gwt.user.User')
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.1 sec <<< FAILURE!
GwtTestMyFirstTestCase.java находится в/src/test/java, в то время как модуль GWT расположен в src/main/java. Я предполагаю, что это не должно быть проблемой.
Я сделал все требуемое согласно http://mojo.codehaus.org/gwt-maven-plugin/user-guide/testing.html и конечно что мой gwt модуль уже имеет com.google.gwt.core. Ядро косвенно импортируется.
4.0.0
com.myproject
main
jar
0.0.1-SNAPSHOT
Main Module
com.myproject.MainModule
com.myproject
app
0.1.0-SNAPSHOT
com.myproject
app-commons
0.0.1-SNAPSHOT
com.google.gwt
gwt-dev
${gwt.version}
provided
org.apache.maven.plugins
maven-dependency-plugin
../app/src/main/webapp/WEB-INF/main.tree
org.codehaus.mojo
gwt-maven-plugin
test
org.apache.maven.plugins
maven-jar-plugin
${project.build.directory}/${project.build.finalName}/${gwt.module}
Вот тестовый сценарий, расположенный в/src/test/java/com/myproject/test/ui
public class GwtTestMyFirstTestCase extends GWTTestCase {
@Override
public String getModuleName() {
return "com.myproject.MainModule";
}
public void testSomething() {
}
}
Вот gwt модуль, который я пытаюсь протестировать, расположенный в src/main/java/com/myproject/MainModule.gwt.xml:
Кто-либо может дать мне подсказку или два о том, что я делаю неправильно?
Проблема заключалась в том, что тест выполнялся с помощью surefire, а не плагина gwt-maven. Мне пришлось явно исключить мои тесты gwt из плагина surefire:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*GwtTest*.java</exclude>
<exclude>**/*Gwt*Suite*.java</exclude>
</excludes>
</configuration>
</plugin>
Я все еще не могу запустить тесты GWTTestCase, но это еще одна проблема и предмет для другого вопроса. Считаю этот вопрос решенным.
Я очень уверен, что эта ошибка не имеет ничего общего с настройкой maven. Сначала я предполагаю, что тесты не находятся на пути компиляции gwt ... Я предполагаю, что проблемный исходный код:
<source path="com.myproject.test.ui" />
попробуйте изменить на:
<source path="com/myproject/test/ui" />
или другой подходящий путь.
Я не думаю, что правильным решением будет просто исключить тесты из жизненного цикла maven. Какой смысл их писать? Что вам нужно сделать, так это правильно настроить maven-surefire-plugin, чтобы он работал.
Видите ли, этот плагин использует системный загрузчик классов для поиска классов, но GWTTestCase требует URLClassLoader . По этой причине вы получаете [ПРЕДУПРЕЖДЕНИЕ] Нет записей исходного пути; ожидайте последующих отказов
.и следующее ClassNotFoundException
. Но не беспокойтесь. Легко сказать maven использовать вместо этого URLClassLoader:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<additionalClasspathElements>
<additionalClasspathElement>${basedir}/src/main/java</additionalClasspathElement>
<additionalClasspathElement>${basedir}/src/test/java</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
Обратите внимание на запись
.
Также обратите внимание, что я добавил исходные коды своих тестов и основные каталоги, чтобы позволить GWT найти необходимые классы для генерации Javascript. Возможно, вам придется настроить его по-другому.