我是春季概念的新手。我正在嘗試爲該類的方法之一編寫一個Junit。我想模擬彈簧框架JdbcTemplate
從多個位置用作@Autowired
的類。但我不想在每個班級中使用@Mock
。有什麼辦法可以嘲笑這個課程,並且可以使用@Autowired
從多個位置使用。模擬春季很多班級常見的類實例
在此先感謝。
我是春季概念的新手。我正在嘗試爲該類的方法之一編寫一個Junit。我想模擬彈簧框架JdbcTemplate
從多個位置用作@Autowired
的類。但我不想在每個班級中使用@Mock
。有什麼辦法可以嘲笑這個課程,並且可以使用@Autowired
從多個位置使用。模擬春季很多班級常見的類實例
在此先感謝。
一種非答案,但我不會推薦在單元測試時使用Spring
到inject dependencies
。如果您使用的是constructor injection
,那麼您可以簡單地從單元測試中調用構造函數,並手動傳遞模擬或測試雙精度。這使得從單元測試中可以清楚明確地看出提供的依賴關係是用於測試目的的。如果你正在使用setter注射,你可以做同樣的事情。不要通過Spring
實現被測試的類,只需從junit
測試類構建測試中的類,然後爲此類強制提供依賴關係。
定義特定於您的測試的彈簧配置文件(例如「測試」),在該配置文件中使用模擬庫和註釋@Profile("test")
創建JdbcTemplate
bean。這樣,只有在「測試」配置文件處於活動狀態時纔會創建該模擬。
將註釋@Profile("!test")
添加到真正的JdbcTemplate
bean中,以便它不會在測試配置文件中創建。
然後在您的測試類之上添加@ActiveProfiles("test")
註釋。
嘿吉姆感謝您的迴應!包含該方法的類有多個Autowired bean,我只想模擬JdbcTemplate bean。但是,當我在測試類中使用@Mock jdbcTemplte時,在創建原始類的bean時,我收到了jdbcTemplate的錯誤nosucbeanfound錯誤。能否請你幫忙? –
你如何從Spring獲得待測試的課程?這聽起來像你的自動裝配註釋沒有找到要在類路徑中注入的類。我需要看到更多的代碼。 @Mock是一個mockito註釋,所以它聽起來像你正在嘗試使用該框架來創建你的模擬。 –
這是我的測試class.public class test {@@ Mock JdbcTemplate a; @@ Autowired ABC abc; @Before public void init(){MockitoAnnotations.initMocks(this);} @@ Test public void test(){abc.somemethod()}} –