簡體   English   中英

如何創建和使用具有Spring + JUnit Test Config注釋的自定義注釋?

[英]How to create and use a Custom Annotation having Spring+JUnit Test Config annotations?

我有大量的測試用例,它們運行Spring Junit支持,每個測試都有以下注釋。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")

我沒有在每個Test類上放置所有這些注釋,而是想創建一個自定義注釋並使用它。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SpringJUnit4TestConfig {

}

但是當我使用這個自定義注釋彈簧注入根本沒有發生。

@SpringJUnit4TestConfig
public class UserServiceTest
{
}

我在這里缺少什么?

PS:但是JUnit的@RunWith和Spring的@Transactional,@ ContextConfiguration都有@ Inherited ..所以我認為它應該有效。 但是現在我通過一個解決方案來解決這個問題。 創建了一個基於抽象的類,並在其上放置了所有這些注釋,並擴展了該基類的測試用例。

我不認為這種方法會起作用,因為@RunWith是JUnit注釋,所以為了工作,JUnit注釋必須是可傳遞的。

當一個類使用@RunWith注釋或者擴展一個使用@RunWith注釋的類時,JUnit將調用它引用的類來運行該類中的測試,而不是JUnit中內置的運行器。 我們在開發后期添加了此功能。 雖然它似乎很強大,但我們希望在我們了解人們如何真正使用它時,運行器API會發生變化。 目前內部的一些課程可能會被改進並公之於眾。

因此測試JUnit測試調用似乎只適用於繼承的類。

至於Spring,它支持一個稱為配置位置的上下文配置繼承的東西, 我不太確定這應該適用於其他注釋類型(請指出我的文檔,如果你不這么認為) 實際上,這可能適用於在測試配置類繼承的情況下的其他注釋,因為@Transactional注釋本身是使用@Inherited為此情況聲明的。

所以在這種情況下,由於JUnit注釋缺失,它不會運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM