mockito模拟依赖注入_使用Mockito模拟自动装配的字段
mockito模擬依賴注入
依賴注入是諸如Spring和EJB之類的Control容器反轉的非常強大的功能。 將注入的值封裝到私有字段中總是一個好主意。 但是,自動連線字段的封裝會降低可測試性。
我喜歡Mockito解決此問題以模擬自動裝配字段的方式。 將在示例中進行解釋。 (此博客文章希望您對Mockito語法有點熟悉,但是它具有足夠的自我描述性。)
這是測試模塊的第一個依賴項。 是Spring單例豆。 該類將在測試中被模擬。
這是測試類的第二個依賴項。 它也是Spring組件。 該類將在測試中被偵聽(部分嘲笑)。 它的方法calculatePriceForOrder將保持不變。 第二種方法將被存根。
@Service public class PriceService {public int getActualPrice(Item item){throw new UnsupportedOperationException("Fail is not mocked!");}public int calculatePriceForOrder(Order order){int orderPrice = 0;for (Item item : order.getItems()){orderPrice += getActualPrice(item);}return orderPrice;} }這是正在測試的課程。 它自動裝配上面的依賴項。
@Service public class OrderService {@Autowiredprivate PriceService priceService;@Autowiredprivate OrderDao orderDao;public int getOrderPrice(int orderId){Order order = orderDao.getOrder(orderId);return priceService.calculatePriceForOrder(order);} }最后是測試示例。 它使用字段級別的注釋:
- @InjectMocks –實例化測試對象實例,并嘗試將用@Mock或@Spy注釋的字段注入到測試對象的私有字段中
- @Mock –創建其注釋字段的模擬實例
- @Spy –為帶注釋的字段實例創建間諜
所以當您運行此測試時會發生什么:
該示例不包括Spring上下文創建,并且Spring的注釋在這里僅作為針對生產代碼使用的示例。 測試本身不包含對Spring的任何依賴關系,并且會忽略其所有注釋。 實際上,可以使用EJB批注代替它,也可以針對普通的(非IoC管理的)私有字段運行它。
開發人員傾向于將MockitoAnnotations.initMocks(this)調用視為不必要的開銷。 但這實際上非常方便,因為它可以重置測試對象并重新初始化模擬。 您可以使用它為例
- 當您使用相同的帶注釋實例的各種測試方法來確保各種測試運行不使用相同的記錄行為時
- 當使用重復/參數化測試時。 例如,您可以將此調用包含在測試方法本身中,并接收間諜對象作為測試參數(作為測試用例的一部分)。 結合TestNG @DataProvider功能,此功能非常性感(將在其他博客文章中對此進行解釋)。
@Spy注釋對象可以通過兩種方式創建
- 如果存在默認(非參數化)構造函數,則由Mockito框架自動進行
- 或顯式初始化(??例如,當只有非默認構造函數時)
@InjectMocks注釋的測試對象也可以顯式初始化。
- 可以從GitHub下載示例源代碼。
翻譯自: https://www.javacodegeeks.com/2014/02/use-mockito-to-mock-autowired-fields.html
mockito模擬依賴注入
總結
以上是生活随笔為你收集整理的mockito模拟依赖注入_使用Mockito模拟自动装配的字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java依赖注入_Java依赖注入选项
- 下一篇: 五菱星云汽车明日上市:HEV 油电混动