-
<!--?spring?boot?start?--> <dependency> ????<groupId>org.springframework.boot</groupId> ????<artifactId>spring-boot-starter</artifactId> ????<exclusions> ????????<!--?排除自帶的logback依賴?--> ????????<exclusion> ????????????<groupId>org.springframework.boot</groupId> ????????????<artifactId>spring-boot-starter-logging</artifactId> ????????</exclusion> ????</exclusions> </dependency> <!--?springboot-log4j?--> <dependency> ????<groupId>org.springframework.boot</groupId> ????<artifactId>spring-boot-starter-log4j</artifactId> </dependency>
package?com.beauty.beauty.aspect; import?org.aspectj.lang.annotation.After; import?org.aspectj.lang.annotation.Aspect; import?org.aspectj.lang.annotation.Before; import?org.aspectj.lang.annotation.Pointcut; import?org.slf4j.Logger; import?org.slf4j.LoggerFactory; import?org.springframework.stereotype.Component; @Aspect @Component public?class?HttpAspect?{ /* ????@Before("execution(public?*?com.beauty.beauty.controller.BeautyController.*(..))") ????public?void?log(){ ????????System.out.println("Aspect"); ????} ????@After("execution(public?*?com.beauty.beauty.controller.BeautyController.*(..))") ????public?void?logAffter(){ ????????System.out.println("Aspect?After"); ????} */ ???private?final?static?Logger?logger=LoggerFactory.getLogger(HttpAspect.class); ????@Pointcut("execution(public?*?com.beauty.beauty.controller.BeautyController.*(..))") ????public?void?log(){ ????????System.out.println("Aspect?public"); ????} ????@Before("log()") ????public?void?logbefore(){ ????????System.out.println("Aspect?Before"); ????} ????@After("log()") ????public?void?logafter(){ ????????System.out.println("Aspect?After"); ????} ????//?@Before("execution(public?*?com.beauty.beauty.controller.BeautyController.beutylist(..))") }
查看全部 -
controller測(cè)試
查看全部 -
aa查看全部
-
打包跳過(guò)單元測(cè)試的方法:
mvn clean pacakge --Dmaven.test.skip=true
查看全部 -
Q: 如果寫(xiě)了很多個(gè)文件和單元測(cè)試,是不是要每個(gè)方法都進(jìn)行右鍵測(cè)試
A:不是,當(dāng)我們對(duì)項(xiàng)目進(jìn)行打包(mvn clean package)的時(shí)候就會(huì)對(duì)項(xiàng)目進(jìn)行單元測(cè)試(會(huì)有日志打出來(lái)給我們)
查看全部 -
對(duì)controller的一個(gè)方法進(jìn)行測(cè)試:
右鍵方法-go to-Test,然后勾選我們要測(cè)試的方法
測(cè)試類(lèi)里面
注解@RunWith(SpringRunner.class)
注解@SpringBootTest
注解@AutoConfigureMockMvc
Autowired MockMvc這個(gè)類(lèi)
在方法里面mvc.perfom的方式并且andExpect:具體看代碼
查看全部 -
使用IDEA對(duì)service方法進(jìn)行更加方便的測(cè)試:
右鍵要測(cè)試的方法-go to-Test-顯示已經(jīng)有的測(cè)試
如果沒(méi)有就可以創(chuàng)建一個(gè)測(cè)試,然后會(huì)幫忙判斷這個(gè)類(lèi)下面所有的方法,勾選自己想要測(cè)試的方法即可(這樣會(huì)在測(cè)試目錄下面建一個(gè)Service對(duì)應(yīng)目錄,然后做好基本的測(cè)試框架)
查看全部 -
對(duì)service進(jìn)行單元測(cè)試
首先在service里面寫(xiě)好方法(記得寫(xiě)好注釋?zhuān)?/p>
在test/java/com.imooc下面新建一個(gè)GirlServiceTest類(lèi)
加兩個(gè)注解:
@RunWith(SpringRunner.class)表示我們要在測(cè)試環(huán)境里面跑,底層使用的是junit測(cè)試工具
@SpringBootTest:表示我們將啟動(dòng)整個(gè)spring工程
注入要測(cè)試的GirlService:使用@Autowired
在測(cè)試的方法上,記得加上@Test注解,
然后在方法里面加使用Service的方法(跟程序里面的調(diào)用很像)(唯一不同的是在在類(lèi)上加了兩個(gè)注解,然后在方法上加了Test注解)
然后在方法里面加一個(gè)斷言Assert來(lái)測(cè)試是否返回結(jié)果跟我們想象的相同
啟動(dòng):文件上右鍵-Run GirlServiceTest
注意,實(shí)現(xiàn)并沒(méi)有啟動(dòng)工程,在下方框框的頂上可以看到進(jìn)度條會(huì)顯示測(cè)試通過(guò)的標(biāo)志
而且我們還可以單獨(dú)Run一個(gè)測(cè)試方法
查看全部 -
單元測(cè)試目標(biāo):
service
api
查看全部 -
異常處理(下)總結(jié):
通過(guò)在domain定義一個(gè)Result類(lèi),固定返回的內(nèi)容格式
在service里面定義GirlService,讓邏輯在一個(gè)地方處理,另外因?yàn)椴恍枰M(jìn)行返回的處理,所以引入了異常
定義自己的異常GirlException可以除了msg,還可以返回code的字段異常
加一個(gè)ExceptionHandle捕獲異常的類(lèi)
將code和msg定義成枚舉進(jìn)行統(tǒng)一管理
查看全部 -
傳枚舉內(nèi)容的方式
查看全部 -
將返回錯(cuò)誤和msg進(jìn)行統(tǒng)一管理:enums
查看全部 -
如果不清楚異常具體是在哪里,我們可以在ExceptionHandle里打日志對(duì)異常進(jìn)行記錄
查看全部 -
notes:
在service里面面修改了拋出的異常,那么在handle里面捕獲的修改捕獲異常的方式
查看全部 -
如果是Java自己的exception,只能返回String內(nèi)容,這樣不能夠,所以我們實(shí)現(xiàn)一個(gè)自己的exception
notes:
記得繼承的是RuntimeException,Spring框架只對(duì)拋出的異常是RuntimeException才會(huì)進(jìn)行對(duì)事務(wù)的回滾(如果是Exception是不會(huì)進(jìn)行事務(wù)回滾的)
在構(gòu)造方法里面我們自己存一個(gè)code,另外由于父類(lèi)的構(gòu)造方法肯定會(huì)傳一個(gè)message進(jìn)來(lái),所以采用super(message)
查看全部
舉報(bào)