diff --git a/mars-core/src/main/java/com/mars/core/after/StartAfter.java b/mars-core/src/main/java/com/mars/core/after/StartAfter.java index 85908a7..4a551b3 100644 --- a/mars-core/src/main/java/com/mars/core/after/StartAfter.java +++ b/mars-core/src/main/java/com/mars/core/after/StartAfter.java @@ -20,11 +20,11 @@ public class StartAfter { */ public static void after() throws Exception { try { - List easyLoads = LoadHelper.getMarsAfterList(); + List afterList = LoadHelper.getMarsAfterList(); Map beanModelMap = LoadHelper.getBeanObjectMap(); - for (Class cls : easyLoads) { + for (Class cls : afterList) { Object obj = cls.getDeclaredConstructor().newInstance(); /* 注入属性 */ diff --git a/mars-core/src/test/java/com/mars/core/test/aop/aop/AopTest.java b/mars-core/src/test/java/com/mars/core/test/aop/aop/AopTest.java new file mode 100644 index 0000000..aade1ab --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/aop/aop/AopTest.java @@ -0,0 +1,26 @@ +package com.mars.core.test.aop.aop; + +import com.alibaba.fastjson.JSON; +import com.mars.aop.base.BaseAop; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AopTest implements BaseAop { + + private Logger logger = LoggerFactory.getLogger(AopTest.class); + + @Override + public void startMethod(Object[] args) { + logger.info("AOP单测开始执行startMethod,方法参数:{}",JSON.toJSONString(args)); + } + + @Override + public void endMethod(Object[] args, Object result) { + logger.info("AOP单测开始执行endMethod,方法参数:{},方法返回值:{}",JSON.toJSONString(args), result); + } + + @Override + public void exp(Throwable e) { + logger.error("AOP单测出异常",e); + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/aop/aop/ExecAopTest.java b/mars-core/src/test/java/com/mars/core/test/aop/aop/ExecAopTest.java new file mode 100644 index 0000000..5bfb851 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/aop/aop/ExecAopTest.java @@ -0,0 +1,48 @@ +package com.mars.core.test.aop.aop; + +import com.mars.aop.model.AopModel; +import com.mars.aop.proxy.exec.ExecAop; +import org.junit.Assert; +import org.junit.Test; + +/** + * 测试AOP执行类 + */ +public class ExecAopTest { + + @Test + public void testStartMethod(){ + try { + AopModel aopModel = new AopModel(); + aopModel.setCls(AopTest.class); + aopModel.setObj(new AopTest()); + ExecAop.startMethod(new Object[]{"a","b"},aopModel); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } + + @Test + public void testEndMethod(){ + try { + AopModel aopModel = new AopModel(); + aopModel.setCls(AopTest.class); + aopModel.setObj(new AopTest()); + ExecAop.endMethod(new Object[]{"a","b"},"返回值",aopModel); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } + + @Test + public void testExp(){ + try { + AopModel aopModel = new AopModel(); + aopModel.setCls(AopTest.class); + aopModel.setObj(new AopTest()); + ExecAop.exp(aopModel,new Exception("单测看一下aop异常")); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/aop/traction/ExecTractionTest.java b/mars-core/src/test/java/com/mars/core/test/aop/traction/ExecTractionTest.java new file mode 100644 index 0000000..5cf53c8 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/aop/traction/ExecTractionTest.java @@ -0,0 +1,56 @@ +package com.mars.core.test.aop.traction; + +import com.mars.aop.model.AopModel; +import com.mars.aop.proxy.exec.ExecTraction; +import com.mars.common.annotation.enums.TractionLevel; +import org.junit.Assert; +import org.junit.Test; + +/** + * 测试事务执行类 + */ +public class ExecTractionTest { + + @Test + public void testBeginTraction(){ + try { + AopModel aopModel = new AopModel(); + aopModel.setCls(TractionTest.class); + aopModel.setObj(new TractionTest()); + aopModel.setTractionLevel(TractionLevel.READ_UNCOMMITTED); + ExecTraction.beginTraction(aopModel); + + aopModel.setTractionLevel(TractionLevel.READ_COMMITTED); + ExecTraction.beginTraction(aopModel); + + aopModel.setTractionLevel(TractionLevel.SERIALIZABLE); + ExecTraction.beginTraction(aopModel); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } + + @Test + public void testCommit(){ + try { + AopModel aopModel = new AopModel(); + aopModel.setCls(TractionTest.class); + aopModel.setObj(new TractionTest()); + ExecTraction.commit(aopModel); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } + + @Test + public void testRollback(){ + try { + AopModel aopModel = new AopModel(); + aopModel.setCls(TractionTest.class); + aopModel.setObj(new TractionTest()); + ExecTraction.rollback(aopModel,new Exception("单测看一下事务异常")); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/aop/traction/TractionTest.java b/mars-core/src/test/java/com/mars/core/test/aop/traction/TractionTest.java new file mode 100644 index 0000000..c747103 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/aop/traction/TractionTest.java @@ -0,0 +1,24 @@ +package com.mars.core.test.aop.traction; + +import com.alibaba.fastjson.JSON; +import com.mars.aop.model.AopModel; +import com.mars.core.test.aop.aop.AopTest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TractionTest { + + private Logger logger = LoggerFactory.getLogger(TractionTest.class); + + public void startMethod(AopModel aopModel) { + logger.info("单测开始执行事务开启方法,事务级别:{}", JSON.toJSONString(aopModel.getTractionLevel())); + } + + public void endMethod() { + logger.info("单测开始执行事务提交方法"); + } + + public void exp(Throwable e) { + logger.info("事务单测出异常",e); + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/after/JunitAfter.java b/mars-core/src/test/java/com/mars/core/test/core/after/JunitAfter.java new file mode 100644 index 0000000..82c8085 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/after/JunitAfter.java @@ -0,0 +1,21 @@ +package com.mars.core.test.core.after; + +import com.mars.common.annotation.bean.MarsWrite; +import com.mars.common.base.BaseAfter; +import org.junit.Assert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class JunitAfter implements BaseAfter { + + private Logger logger = LoggerFactory.getLogger(JunitAfter.class); + + @MarsWrite("junitTestBean") + private TestBean testBean; + + @Override + public void after() throws Exception { + logger.info("执行了After方法,testBean的值:{}",testBean); + Assert.assertNotNull(testBean); + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/after/StartAfterTest.java b/mars-core/src/test/java/com/mars/core/test/core/after/StartAfterTest.java new file mode 100644 index 0000000..17982fa --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/after/StartAfterTest.java @@ -0,0 +1,49 @@ +package com.mars.core.test.core.after; + +import com.mars.common.constant.MarsConstant; +import com.mars.common.constant.MarsSpace; +import com.mars.core.after.StartAfter; +import com.mars.core.load.LoadHelper; +import com.mars.core.model.MarsBeanModel; +import com.mars.ioc.factory.BeanFactory; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; +import java.util.Map; + +/** + * 测试after + */ +public class StartAfterTest { + + @Test + public void testAfter(){ + try { + + MarsSpace marsSpace = MarsSpace.getEasySpace(); + + marsSpace.remove(MarsConstant.HAS_START); + + Map beanModelMap = LoadHelper.getBeanObjectMap(); + MarsBeanModel marsBeanModel = new MarsBeanModel(); + marsBeanModel.setCls(TestBean.class); + marsBeanModel.setName("junitTestBean"); + marsBeanModel.setObj(BeanFactory.createBean(TestBean.class)); + beanModelMap.put("junitTestBean",marsBeanModel); + marsSpace.setAttr(MarsConstant.MARS_BEAN_OBJECTS,beanModelMap); + + + List afterList = LoadHelper.getMarsAfterList(); + afterList.add(JunitAfter.class); + marsSpace.setAttr(MarsConstant.MARS_AFTERS,afterList); + + StartAfter.after(); + + marsSpace.remove(MarsConstant.MARS_AFTERS); + marsSpace.remove(MarsConstant.MARS_BEAN_OBJECTS); + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/after/TestBean.java b/mars-core/src/test/java/com/mars/core/test/core/after/TestBean.java new file mode 100644 index 0000000..cdb57aa --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/after/TestBean.java @@ -0,0 +1,8 @@ +package com.mars.core.test.core.after; + +import com.mars.common.annotation.bean.MarsBean; + +@MarsBean("junitTestBean") +public class TestBean { + +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/LoadTest.java b/mars-core/src/test/java/com/mars/core/test/core/load/LoadTest.java new file mode 100644 index 0000000..d9c1b55 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/LoadTest.java @@ -0,0 +1,86 @@ +package com.mars.core.test.core.load; + +import com.mars.common.annotation.api.MarsApi; +import com.mars.common.constant.MarsConstant; +import com.mars.common.constant.MarsSpace; +import com.mars.core.load.LoadBeans; +import com.mars.core.load.LoadClass; +import com.mars.core.load.LoadHelper; +import com.mars.core.model.MarsBeanClassModel; +import com.mars.core.test.core.load.junitbean.*; +import com.mars.redis.lock.MarsRedisLock; +import com.mars.redis.template.MarsRedisTemplate; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * bean扫描测试 + */ +public class LoadTest { + + @Test + public void testLoad(){ + try { + + MarsSpace marsSpace = MarsSpace.getEasySpace(); + + List packageList = new ArrayList<>(); + packageList.add("com.mars.core.test.core.load.junitbean"); + LoadClass.scanClass(packageList); + + LoadBeans.loadBeans(); + + List marsApiList = LoadHelper.getMarsApiList(); + for(MarsBeanClassModel api : marsApiList){ + Assert.assertEquals(api.getClassName(), JunitMarsApi.class); + Assert.assertNotNull(api.getAnnotation()); + } + marsSpace.remove(MarsConstant.CONTROLLERS); + + List afterList = LoadHelper.getMarsAfterList(); + for(Class afterCls : afterList){ + Assert.assertEquals(afterCls, JunitMarsAfter.class); + } + marsSpace.remove(MarsConstant.MARS_AFTERS); + + List marsBeanClassModelList = LoadHelper.getBeanList(); + for(MarsBeanClassModel bean : marsBeanClassModelList){ + if(bean.getClassName().equals(MarsRedisTemplate.class)){ + continue; + } + if(bean.getClassName().equals(MarsRedisLock.class)){ + continue; + } + if(bean.getClassName().equals(JunitMarsBean.class)){ + Assert.assertEquals(bean.getClassName(), JunitMarsBean.class); + Assert.assertNotNull(bean.getAnnotation()); + } + if(bean.getClassName().equals(JunitIocMarsBean.class)){ + Assert.assertEquals(bean.getClassName(), JunitIocMarsBean.class); + Assert.assertNotNull(bean.getAnnotation()); + } + } + marsSpace.remove(MarsConstant.MARS_BEANS); + + List daoList = LoadHelper.getDaoList(); + for(MarsBeanClassModel dao : daoList){ + Assert.assertEquals(dao.getClassName(), JunitMarsDao.class); + Assert.assertNotNull(dao.getAnnotation()); + } + marsSpace.remove(MarsConstant.MARS_DAOS); + + List interList = LoadHelper.getInterceptorList(); + for(MarsBeanClassModel inter : interList){ + Assert.assertEquals(inter.getClassName(), JunitMarsInterceptor.class); + Assert.assertNotNull(inter.getAnnotation()); + } + marsSpace.remove(MarsConstant.INTERCEPTORS); + + } catch (Exception e){ + Assert.fail(e.getMessage()); + } + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitIocMarsBean.java b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitIocMarsBean.java new file mode 100644 index 0000000..048087b --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitIocMarsBean.java @@ -0,0 +1,7 @@ +package com.mars.core.test.core.load.junitbean; + +import com.mars.common.annotation.bean.MarsBean; + +@MarsBean +public class JunitIocMarsBean { +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsAfter.java b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsAfter.java new file mode 100644 index 0000000..d06d7f2 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsAfter.java @@ -0,0 +1,13 @@ +package com.mars.core.test.core.load.junitbean; + +import com.mars.common.annotation.bean.MarsAfter; +import com.mars.common.base.BaseAfter; + +@MarsAfter +public class JunitMarsAfter implements BaseAfter { + + @Override + public void after() throws Exception { + + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsApi.java b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsApi.java new file mode 100644 index 0000000..1915ef5 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsApi.java @@ -0,0 +1,7 @@ +package com.mars.core.test.core.load.junitbean; + +import com.mars.common.annotation.api.MarsApi; + +@MarsApi +public interface JunitMarsApi { +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsBean.java b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsBean.java new file mode 100644 index 0000000..c7fcdd4 --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsBean.java @@ -0,0 +1,19 @@ +package com.mars.core.test.core.load.junitbean; + +import com.mars.common.annotation.bean.MarsBean; +import com.mars.common.annotation.bean.MarsWrite; + +@MarsBean("junitMarsBean") +public class JunitMarsBean { + + @MarsWrite + private JunitIocMarsBean junitIocMarsBean; + + public JunitIocMarsBean getJunitIocMarsBean() { + return junitIocMarsBean; + } + + public void setJunitIocMarsBean(JunitIocMarsBean junitIocMarsBean) { + this.junitIocMarsBean = junitIocMarsBean; + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsDao.java b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsDao.java new file mode 100644 index 0000000..8c0350b --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsDao.java @@ -0,0 +1,7 @@ +package com.mars.core.test.core.load.junitbean; + +import com.mars.common.annotation.jdbc.MarsDao; + +@MarsDao +public abstract class JunitMarsDao { +} diff --git a/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsInterceptor.java b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsInterceptor.java new file mode 100644 index 0000000..0e3161b --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/core/load/junitbean/JunitMarsInterceptor.java @@ -0,0 +1,19 @@ +package com.mars.core.test.core.load.junitbean; + +import com.mars.common.annotation.api.MarsInterceptor; +import com.mars.common.annotation.bean.MarsWrite; + +@MarsInterceptor +public class JunitMarsInterceptor { + + @MarsWrite + private JunitMarsBean junitMarsBean; + + public JunitMarsBean getJunitMarsBean() { + return junitMarsBean; + } + + public void setJunitMarsBean(JunitMarsBean junitMarsBean) { + this.junitMarsBean = junitMarsBean; + } +} diff --git a/mars-core/src/test/java/com/mars/core/test/ioc/LoadMarsBeanTest.java b/mars-core/src/test/java/com/mars/core/test/ioc/LoadMarsBeanTest.java new file mode 100644 index 0000000..401cc4e --- /dev/null +++ b/mars-core/src/test/java/com/mars/core/test/ioc/LoadMarsBeanTest.java @@ -0,0 +1,71 @@ +package com.mars.core.test.ioc; + +import com.mars.common.annotation.bean.MarsBean; +import com.mars.common.constant.MarsConstant; +import com.mars.common.constant.MarsSpace; +import com.mars.core.load.LoadBeans; +import com.mars.core.load.LoadClass; +import com.mars.core.load.LoadHelper; +import com.mars.core.model.MarsBeanModel; +import com.mars.core.test.core.load.junitbean.JunitIocMarsBean; +import com.mars.core.test.core.load.junitbean.JunitMarsBean; +import com.mars.ioc.load.LoadMarsBean; +import com.mars.redis.lock.MarsRedisLock; +import com.mars.redis.template.MarsRedisTemplate; +import org.junit.Assert; +import org.junit.Test; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 测试bean创建 + */ +public class LoadMarsBeanTest { + + @Test + public void testLoadBean(){ + try { + MarsSpace marsSpace = MarsSpace.getEasySpace(); + + List packageList = new ArrayList<>(); + packageList.add("com.mars.core.test.core.load.junitbean"); + LoadClass.scanClass(packageList); + + LoadBeans.loadBeans(); + + LoadMarsBean.loadBean(); + + Map marsBeanObjects = LoadHelper.getBeanObjectMap(); + + MarsBeanModel junitIocMarsBean = marsBeanObjects.get("junitIocMarsBean"); + Assert.assertNotNull(junitIocMarsBean); + Assert.assertEquals(junitIocMarsBean.getCls(), JunitIocMarsBean.class); + Assert.assertEquals(junitIocMarsBean.getName(),"junitIocMarsBean"); + Assert.assertNotNull(junitIocMarsBean.getObj()); + + MarsBeanModel junitMarsBean = marsBeanObjects.get("junitMarsBean"); + Assert.assertNotNull(junitMarsBean); + + Assert.assertEquals(junitMarsBean.getCls(),JunitMarsBean.class); + Assert.assertEquals(junitMarsBean.getName(),"junitMarsBean"); + Assert.assertNotNull(junitMarsBean.getObj()); + + /* 校验属性是否注入成功 */ + JunitMarsBean junitMarsBeanObj = (JunitMarsBean)junitMarsBean.getObj(); + Assert.assertNotNull(junitMarsBeanObj.getJunitIocMarsBean()); + + marsSpace.remove(MarsConstant.CONTROLLERS); + marsSpace.remove(MarsConstant.MARS_AFTERS); + marsSpace.remove(MarsConstant.MARS_BEANS); + marsSpace.remove(MarsConstant.MARS_DAOS); + marsSpace.remove(MarsConstant.INTERCEPTORS); + + } catch (Exception e){ + e.printStackTrace(); + Assert.fail(e.getMessage()); + } + } +}