做資訊類網(wǎng)站需要特殊資質(zhì)嗎網(wǎng)絡營銷文案策劃
void afterReturnName() {
Assertions.assertEquals(studentController.getNameById(123L).getName(), "測試姓名Yz");
}
}
但往往切面中的邏輯并非這么簡單,在實際的測試中其實我們也完成沒有必要關心在切面中到底發(fā)生了什么(發(fā)生了什么應該在測試切面的方法中完成)。我們在此主要關心的是切面是否成功的被執(zhí)行了,同時建立相應的斷言,以防止在日后面的代碼迭代過程中不小心使當前的切面失效。
MockBean
Spring Boot為我們提供了 MockBean
?來直接 Mock
?掉某個 Bean
?。在測試切面是否成功執(zhí)行時,我們并不關心 StudentController
?中的 getNameById()
?方法的執(zhí)行邏輯,所以適用于合適 MockBean
?來聲明。
@SpringBootTest
class AddYzAspectTest {
- @Autowired
- @MockBean
StudentController studentController;
但 MockBean
?并不適合于測試切面,這是由于 MockBean
?在生成新的代理時將直接忽略掉相關切面的注解,導致切面直接失效。
同時 MockBean
?雖然可以用于來模擬 Controller
?,但如果用它來模擬Aspect則會發(fā)生錯誤。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration’: BeanPostProcessor before instantiation of bean failed;
MockSpy
除了 MockBean
?以外,Spring Boot還準備了攜帶了真正的 Bean
?,但該 Bean
?又可以隨時按需求 Mock
?掉的,同時使用該注解生成的 Bean
?并不會破壞原來的切面。
class AddYzAspectTest {
@SpyBean
StudentController studentController;
@SpyBean
AddYzAspect addYzAspect;
但在這需要 注意?的 @SpyBean
?雖然成功的生成了兩個可以被 Mock
?掉的 Bean
?,但在執(zhí)行相應的 Mock
?方法時其對應的切面方法會自動調(diào)用一次。比如以下代碼將自動調(diào)用 AddYzAspect
?中的afterReturnName
?方法。
@Test
void afterReturnName() {
StudentController.Student student = new StudentController.Student("test");
Mockito.doReturn(student).when(this.studentController).getNameById(123L); :point\_left:
}
而此時由于被 Mock
?掉的方法聲明了返回值,所以Mockito則會使用 null
?來做為返回值來訪問AddYzAspect
?中的 afterReturnName
?方法。所以此時則會發(fā)生了個 NullPointerException
?異常:
java.lang.NullPointerException
at club.yunzhi.smartcommunity.aspects.AddYzAspect.afterReturnName(AddYzAspect.java:14)
所以我們在Mock被切的方法前,需要提前把切面的相關方法Mock掉,同時由于Mock被切方法時會以
null
?來做為方法的返回值,所以在相應的參數(shù)上直接寫入null
?即可:
@Test
void afterReturnName() {
Mockito.doNothing().when(this.addYzAspect).afterReturnName(null);
Mockito.doReturn(null).when(this.studentController).getNameById(123L);
完整測試代碼
@SpringBootTest
class AddYzAspectTest {
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
既有適合小白學習的零基礎資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲取:vip1024b (備注Java)
最后的話
無論是哪家公司,都很重視Spring框架技術,重視基礎,所以千萬別小看任何知識。面試是一個雙向選擇的過程,不要抱著畏懼的心態(tài)去面試,不利于自己的發(fā)揮。
同時看中的應該不止薪資,還要看你是不是真的喜歡這家公司,好了希望這篇文章對大家有幫助!
部分截圖:
一個人可以走的很快,但一群人才能走的更遠。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎掃碼加入我們的的圈子(技術交流、學習資源、職場吐槽、大廠內(nèi)推、面試輔導),讓我們一起學習成長!
mg-0wwK6pQx-1712761245561)]
一個人可以走的很快,但一群人才能走的更遠。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎掃碼加入我們的的圈子(技術交流、學習資源、職場吐槽、大廠內(nèi)推、面試輔導),讓我們一起學習成長!
[外鏈圖片轉存中…(img-YmWB2CLF-1712761245562)]