Я запускал блок-тесты Selenium в TestNG с задачей Ant Java следующим образом:
<java classpathref="runtime.classpath"
classname="org.testng.TestNG"
failonerror="false">
<arg value="-d" />
<arg value="${grid.location}/target/reports" />
<arg value="${lib.location}/testng.xml"/>
</java>
runtime.classpath
- это путьная структура, включающая <pathelement path="${basedir}/target/classes/" />
, которая, как мне показалось, необходима, чтобы TestNG знал, какие классы запускаться.
<path id="runtime.classpath">
...
<!-- Target classes -->
<pathelement path="${basedir}/target/classes/" />
</path>
Однако я продолжал видеть в журнале, что TestNG обнаружил 0 применимых классов.
В конце концов я получил некоторую помощь от коллеги, и похоже, это было ключевым изменением:
<path id="runtime.classpath">
...
<!-- path attribute changed to location -->
<pathelement location="${basedir}/target/classes/" />
</path>
Это также правильно вставляет тестовые классы:
<java classpathref="runtime.classpath"
classname="org.testng.TestNG"
failonerror="false">
<arg value="-d" />
<arg value="${grid.location}/target/reports" />
<arg value="${lib.location}/testng.xml"/>
<classpath>
<pathelement location="${basedir}/target/classes/" />
</classpath>
</java>
В чем разница между атрибутами path
и location
? Я просмотрел Написание простого файла сборки (в частности, раздел Path-like Structures), но в этом руководстве мне кажется, что location
более конкретно, чем path
. Это не похоже на эмпирически, но я не могу понять, почему.