web-dev-qa-db-ja.com

@ After、@テストケースで動作しない前

テストを開始し、@After@Before、および@Testを使用したいのですが、アプリケーションは@Beforeメソッドのみを実行し、コンソールに出力を表示します

ただし、@After@Beforeを削除すると、@ Testが実行されます。私のコードはここにあります:

public class TestPractise extends AbstractTransactionalDataSourceSpringContextTests{

    @Before
    public void runBare(){
        System.out.println("before");
    }

    @Test
    public void testingMethod(){
        System.out.println("testing");
    }

    @After
    public void setDirty(){
        System.out.println("after");
    }
}

@After@Test、および@beforeが同時に機能しないのはなぜですか?

15
abhishek ameta

AbstractTransactionalDataSourceSpringContextTestsクラスは、古いJUnit 3.x構文の使用を強制します。これは、JUnit4アノテーションのいずれも機能しないことを意味します。

メソッドrunBare()は、_@Before_アノテーションのためではなく、ConditionalTestCaseとJUnitによって提供されるメソッドであるrunBare()という名前で実行されます- TestCase クラス。

したがって、2つの解決策があります。

  • AlexRの回答を使用して、JUnit4テストとSpringを使用します。
  • AbstractTransactionalDataSourceSpringContextTestsの継承を維持しますが、_@Before_および_@After_メソッドの代わりにonSetUpおよびonTearDownメソッドを使用します。
10
Romain Linsolas

使用する @BeforeEach の代わりに @Beforeおよび@AfterEach の代わりに @After

8
vikram k

動作するはずです...しかし、Spring Frameworkを使用していて、JUnit 4が数年前に導入されたので、継承の代わりにアノテーションを使用することをお勧めします。

したがって、クラスに@RunWith(SpringJUnit4ClassRunner.class)アノテーションを付けます。削除する extends AbstractTransactionalDataSourceSpringContextTests

@ Before および@Afterメソッドstaticを作成することを忘れないでください

これで動作するはずです。

Spring抽象テストクラスを拡張したい場合でも、少なくともそれらのいくつかは非推奨であることに注意してください。たとえば、クラスAbstractTransactionalDataSourceSpringContextTestsは非推奨です。

3
AlexR