7

私は、各JUnitテストを実行する前に何らかのアクションを実行する必要があるプロジェクトに取り組んでいます。この問題はRunListener、JUnitコアに追加できるものを使用して解決されました。プロジェクトのアセンブリはMavenを使用して行われるため、pomファイルに次の行があります。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <properties>
                    <property>
                        <name>listener</name>
                        <value>cc.redberry.core.GlobalRunListener</value>
                    </property>
                </properties>
            </configuration>
        </plugin>

したがって、すべてが次を使用して機能します。

mvn clean test

ただし、IntelliJを使用して(内部テストランナーを使用して)テストを開始すると、コード化されたアクションRunListenerは実行されないため、IntelliJインフラストラクチャを使用してテストを実行することはできません。

ご覧のとおり、IntelliJはpomファイルからこの構成を解析しないので、IntelliJRunListenerにJUnitコアに追加するように明示的に指示する方法はありますか?構成でいくつかのVMオプションを使用している可能性がありますか?

Maven出力を読み取る代わりに、美しいIntelliJテスト環境を使用する方がはるかに便利です。

PS実行する必要のあるアクションは、基本的に静的環境のリセットです(クラス内のいくつかの静的フィールド)。

4

1 に答える 1

5

Intellij で RunListener を指定する方法はわかりませんでしたが、別の解決策は、独自の顧客 Runner を作成し、テストで @RunWith() に注釈を付けることです。

public class MyRunner extends BlockJUnit4ClassRunner {
    public MyRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    @Override
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
        // run your code here. example:
        Runner.value = true;            

        super.runChild(method, notifier);
    }
}

静的変数の例:

public class Runner {
    public static boolean value = false;
}

次に、次のようにテストを実行します。

@RunWith(MyRunner.class)
public class MyRunnerTest {
    @Test
    public void testRunChild() {
        Assert.assertTrue(Runner.value);
    }
}

これにより、RunListener なしで静的初期化を行うことができます。

于 2013-01-11T04:35:41.377 に答える