Junit4测试入门、Spring 使用 AspectJ 进行 AOP 的开发

本文介绍了如何使用Junit4进行测试,并详细阐述了Spring利用AspectJ进行AOP开发的步骤,包括环境配置、注解的使用、目标类与切面类的编写及配置等。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

在这里插入图片描述
在这里插入图片描述

一、环境配置

使用idea IDE 进行单元测试,首先需要安装JUnit 插件。
1.安装JUnit插件步骤 File-->settings-->Plguins-->Browse repositories-->输入JUnit-->选择JUnit Generator V2.0安装。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二.常用注解:

1.@Test: 测试方法
    a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
    b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过
  2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码
  3.@Before: 每一个测试方法之前运行
  4.@After: 每一个测试方法之后运行
  5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法
  6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After 执行顺序:@BeforeClass=》@Before=》@Test=》@After=》@AfterClass
import org.junit.*;
import org.junit.Test;

public class Test1 {
    @Test
    public void test() {  System.out.println("HelloWorld!"); }
    @BeforeClass
    public static void beforeClass() { System.out.println("beforeClass");}
    @AfterClass
    public static void afterClass() {System.out.println("AfterClass");  }
    @Before
    public void before() { System.out.println("Before"); }
    @After
    public void After() { System.out.println("After");}
    @Ignore
    public void ignore() { System.out.println("ignore"); }
}

注意:编写测试类的原则:

①测试方法上必须使用@Test进行修饰
②测试方法必须使用public void 进行修饰(不能换其他修饰符如private,static),不能带任何的参数
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
④测试类所在的包名应该和被测试类所在的包名保持一致
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
⑥测试类使用Test作为类名的后缀(不是必须)
⑦测试方法使用test作为方法名的前缀(不是必须)

Junit+Spring

// 类的声明上方
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-config.xml")
public class Test2 {
    @Resource(name="user")// 成员位置
    User user = new User();
    @Test
    public void test2(){
        System.out.println(user.getName());
   		 }
    }

1.2.1Spring 使用 AspectJ 进行 AOP 的开发:注解的方式

1.2.1.1引入相关的 jar 包:
*spring 的传统 AOP 的开发的包
spring-aop-4.2.4.RELEASE.jar com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aspects-4.2.4.RELEASE.jar
1.2.1.2引入 Spring 的配置文件

引入 AOP 约束:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"

1.2.1.3编写目标类:

public class ProductDao {
public void save(){ System.out.println("保存商品...");
}
public void update(){ System.out.println("修改商品...");
}
public void delete(){ System.out.println("删除商品...");
}

1.2.1.4配置目标类:

<!-- 目标类============ -->
<bean id="productDao" class="cn.vp.spring.demo4.ProductDao"></bean>

1.2.1.5开启 aop 注解的自动代理:

<aop:aspectj-autoproxy/>

1.2.1.6AspectJ 的 AOP 的注解:
在这里插入图片描述
1.2.1.7编写切面类:

@Aspect
public class MyAspectAnno {


@Before("MyAspectAnno.pointcut1()")
public void before(){
System.out.println("前置通知===========");
}


@Pointcut("execution(* cn.vp.spring.demo4.ProductDao.save(..))")
private void pointcut1(){}
}

1.2.1.8配置切面:

<!-- 配置切面类 -->
<bean id="myAspectAnno" class="cn.vp.spring.demo4.MyAspectAnno"></bean>

1.2.1.9其他通知的注解:

@Aspect

public class MyAspectAnno {

@Before("MyAspectAnno.pointcut1()")
public void before(){
System.out.println("前置通知===========");
}

@AfterReturning("MyAspectAnno.pointcut2()")
public void afterReturning(){ System.out.println("后置通知===========");
}

@Around("MyAspectAnno.pointcut3()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{ System.out.println("环绕前通知==========");
Object obj = joinPoint.proceed();
System.out.println("环绕后通知==========");
return obj;
}

@AfterThrowing("MyAspectAnno.pointcut4()")
public void afterThrowing(){ System.out.println("异常抛出通知========");
}

@After("MyAspectAnno.pointcut4()")
public void after(){
System.out.println("最终通知==========");
}

@Pointcut("execution(* cn..spring.demo4.ProductDao.save(..))")
private void pointcut1(){}
@Pointcut("execution(* cn.vp.spring.demo4.ProductDao.update(..))")
private void pointcut2(){}
@Pointcut("execution(* cn.vp.spring.demo4.ProductDao.delete(..))")
private void pointcut3(){}
@Pointcut("execution(* cn.vp.spring.demo4.ProductDao.find(..))")
private void pointcut4(){}
}

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值