亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教Spring做單元測試的時候如果通過mock虛擬jndi數據源?

請教Spring做單元測試的時候如果通過mock虛擬jndi數據源?

有只小跳蛙 2019-08-21 18:14:45
請教Spring做單元測試的時候如果通過mock虛擬jndi數據源
查看完整描述

3 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

如何用mockito+spring進行單元測試(1)
  本文只說如何使用。
  假設你和我一樣,也要構造一個系統,系統中有若干service,假設是A,B,C吧。
  其中A 依賴 B 依賴 C。C是最基本的。
  現在需要對A進行單測,但是C需要依賴于外部環境,而這個環境需要復雜而且不穩定的數據庫。怎么辦呢?這時你就需要mock掉C。
  第一步你需要在appctx文件中申明:
  <bean id="serviceC" name="service_c_Mock" class="org.mockito.Mockito" factory-method="mock">
  <constructor-arg value="com.x.y.x.ServiceC"></constructor-arg>
  </bean>
  需要注意的是bean的id必須要和A和B中autowire時使用名字一致?;蛘哂妙愋鸵残?。
  然后在單測case中用@Mock或者@Resource引入sercieC。接著在單測case的Setup中調用如下語句。
  MockitoAnnotations.initMocks(this);
  這時你測試A的方法,A訪問B,B訪問C時,調用會落在mockito生成的一個代理上。這個時候所調用的任何方法都會返回null。
  這可能不是你期望的,你可能期望在A用到的那些些方法上,輸入某個值時返回某個特定的值。這個時候你需要:
  when().then();
  如果這還不夠,你希望他輸入某個值的時候返回特定值,如果輸入的值不是特定值的時候,返回正常邏輯的值,你需要spy,并傳入一個serviceC的實現。
  這個方法也解決了那個對于不mock的方法進行返回的問題。

查看完整回答
反對 回復 2019-08-24
  • 3 回答
  • 0 關注
  • 1104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號