Запуск Junit через Ant, похоже, не использует пользовательский класс runner - PullRequest
7 голосов
/ 17 октября 2011

У меня есть собственный бегун, который отправляет тесты Junit через сокет-соединение с сервером Junit, работающим на другом оборудовании. Тесты выполняются, как и предполагалось, со следующей целью:

    <target name="run">
        <mkdir dir="reports" />
        <junit fork="yes" haltonfailure="no">
            <test name="${CurrentTest}" />
            <formatter type="xml" />
            <classpath refid="mastersuite.classpath" />
        </junit>

        <junitreport todir="${JunitReport.dir}">
            <fileset dir=".">
                <include name="TEST-*.xml" />           
            </fileset>
            <report todir="${JunitReport.dir}" />
        </junitreport>
    </target>

Однако, когда я добавляю следующий элемент ...

<target name="run">
    <delete dir="reports" failonerror="false" />        
    <!-- Make the reports directory -->
    <mkdir dir="reports" />

    <!-- Execute the tests and saves the results to XML -->
    <junit fork="yes" printsummary="no" haltonfailure="no">
        <batchtest fork="yes" todir="${JunitReport.dir}">
            <fileset dir="${APITesting.classes}">
                <include name="test/api/**/*Test.class" />
            </fileset>
        </batchtest>
        <formatter type="xml" />
        <classpath refid="mastersuite.classpath" />
    </junit>

    <!-- Compile the resulting XML file into an HTML based report. -->
    <junitreport todir="${JunitReport.dir}">
        <fileset dir="${JunitReport.dir}">
            <include name="TEST-*.xml" />
        </fileset>
        <report todir="${JunitReport.dir}" />
    </junitreport>
</target>

ничего не отправляется на аппаратное обеспечение, что заставляет меня поверить, что моя аннотация @RunWith (com.company.name.RemoteTestCaseRunner.class) не соблюдается в контексте . Есть ли что-то, что я забыл сделать, или, возможно, это нужно сделать дополнительно, чтобы вызвать мою аннотацию @RunWith?

Тесты все еще выполняются, и отчеты создаются, и некоторые тесты, не зависящие от платформы, выполняются и проходят, но не те, которые требуют взаимодействия со службами на целевом оборудовании.

ОБНОВЛЕНИЕ Я определил, что это работает нормально при использовании @RunWith (Suite.class) в паре с @SuiteClasses ({}), но только если я явно приведу тестовый пример. Так что теперь я действительно не уверен, в чем проблема.

ОБНОВЛЕНИЕ Хотя я не нашел в этом ничего хорошего, поведение моих тестов, по-видимому, подразумевает следующее: основываясь на том, как мои тесты отформатированы (они расширяют TestCase), я думаю, что Ant выполняет мои тесты в качестве тестов Junit3. Как указано выше, когда я запускаю набор тестов, отформатированный для Junit4 (используя только аннотации), мои тесты запускаются и выполняются, как предполагалось. Кажется, что когда я прохожу тестовый пример в формате Junit3 напрямую, это когда мои аннотации не учитываются, что подразумевает использование бегуна Junit3.

Мой новый вопрос таков: есть ли способ явно указать муравью использовать бегун Junit 4?

1 Ответ

8 голосов
/ 18 октября 2011

Кажется, что Ant автоматически решает, какой бегун использовать, основываясь на том, использует ли ваш тестовый пример Junit4TestAdapter. В итоге мне пришлось добавить следующий метод ко всем моим тестам:

public class MyTestCase extends TestCase
    public static junit.framework.Test suite() {
        return new JUnit4TestAdapter(MyTestCase.class);
    }
    ...
}

Большинству из вас, вероятно, не потребуется расширять TestCase, но в моем случае это требуется, поскольку Junit4 действует как клиент для сервера Junit3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...