テストを開始し、@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
が同時に機能しないのはなぜですか?
AbstractTransactionalDataSourceSpringContextTests
クラスは、古いJUnit 3.x構文の使用を強制します。これは、JUnit4アノテーションのいずれも機能しないことを意味します。
メソッドrunBare()
は、_@Before
_アノテーションのためではなく、ConditionalTestCase
とJUnitによって提供されるメソッドであるrunBare()
という名前で実行されます- TestCase
クラス。
したがって、2つの解決策があります。
AbstractTransactionalDataSourceSpringContextTests
の継承を維持しますが、_@Before
_および_@After
_メソッドの代わりにonSetUp
およびonTearDown
メソッドを使用します。使用する @BeforeEach
の代わりに @Before
および@AfterEach
の代わりに @After
。
動作するはずです...しかし、Spring Frameworkを使用していて、JUnit 4が数年前に導入されたので、継承の代わりにアノテーションを使用することをお勧めします。
したがって、クラスに@RunWith(SpringJUnit4ClassRunner.class)
アノテーションを付けます。削除する extends AbstractTransactionalDataSourceSpringContextTests
。
@ Before および@Afterメソッドstaticを作成することを忘れないでください
これで動作するはずです。
Spring抽象テストクラスを拡張したい場合でも、少なくともそれらのいくつかは非推奨であることに注意してください。たとえば、クラスAbstractTransactionalDataSourceSpringContextTests
は非推奨です。