5

初めて Spring を使用して Junit テスト スイートをセットアップしようとしていますが、クラスでいくつかの変更を試みましたが、うまくいかず、「junit.framework.AssertionFailedError: No tests found in Myclass」というエラーが発生しました。

簡単に言うと、以下のように Spring コンテキストをロードする同じ基本クラスからの 2 つのテスト クラスがあります。

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration( locations =
{
"classpath:ApplicationContext.xml"
})

以下のように、これら2つのテストクラスをスイートに追加してみました

@RunWith( SpringJUnit4ClassRunner.class )
@SuiteClasses({ OneTest.class, TwoTest.class })
public class MyTestSuite extends TestCase {

//nothing here
}

このテスト スイートを ant から実行しています。しかし、これにより「テストが見つかりません」というエラーが表示されますが、ant から個々の 2 つのテスト ケースを実行すると、正しく動作します。なぜこの動作なのかわかりませんが、ここで何かが欠けていると確信しています。ご意見をお聞かせください。

4

1 に答える 1

7

コメントで述べたように、TestSuite を実行し、@RunWith(Suite.class)すべてのテスト ケースを で一覧表示し@SuiteClasses({})ます。@RunWith(SpringJunit4ClassRunner.class)各テスト ケースでandを繰り返さないために@ContextConfiguration(locations = {classpath:META-INF/spring.xml})、これらの注釈が定義された AbstractTestCase を作成し、すべてのテスト ケースに対してこの抽象クラスを拡張します。サンプルは以下にあります。

/**
 * An abstract test case with spring runner configuration, used by all test cases.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =
{ "classpath:META-INF/spring.xml" })
public abstract class AbstractSampleTestCase
{
}


public class SampleTestOne extends AbstractSampleTestCase
{
    @Resource
    private SampleInterface sampleInterface;

    @Test
    public void test()
    {
        assertNotNull(sampleInterface);
    }

}


public class SampleTestTwo extends AbstractSampleTestCase
{
    @Resource
    private SampleInterface sampleInterface;

    @Test
    public void test()
    {
        assertNotNull(sampleInterface);
    }

}


@RunWith(Suite.class)
@SuiteClasses(
{ SampleTestOne.class, SampleTestTwo.class })
public class SampleTestSuite
{
}

が必要ないAbstractSampleTest場合は、SpringSpringJunitSuiteRunnerSpringJunitParameterizedRunner.

于 2012-09-15T03:47:12.947 に答える