quote
No spring injection method
package com.sunrun.console.service.impl; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.annotation.Resource; import org.junit.Test; import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.framework.AopProxy; import org.springframework.aop.support.AopUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sunrun.console.constant.SysCst; import com.sunrun.console.service.ISettleService; import com.sunrun.mpos.common.core.PropertiesHolder; import org.junit.Assert; public class SettleServiceImplTest{ @Test public void suppose_bank_settle_no_is_null() throws Exception{ ApplicationContext act = new ClassPathXmlApplicationContext(new String[]{"config/console-context.xml"}); ISettleService settleService = (ISettleService)act.getBean(ISettleService.class); SettleServiceImpl ssi = (SettleServiceImpl)getTargetObject(settleService);; Method methodConfig = SettleServiceImpl.class.getMethod("configBankSettleNoAndName", StringBuffer.class); methodConfig.setAccessible(true); StringBuffer result = new StringBuffer(""); methodConfig.invoke(ssi, result); System.out.println(result.toString()); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NO)); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NAME)); //String rs = "<bankSettleNo>888888888888</bankSettleNo><bankSettleName>China CITIC Bank Shanghai Branch Business Department</bankSettleName>"; String rs = "<bankSettleNo>7332410182600005752</bankSettleNo><bankSettleName>中信10321325</bankSettleName>"; Assert.assertEquals(rs, result.toString());; } public static Object getTargetObject(Object proxy) throws Exception { if(!AopUtils.isAopProxy(proxy)) { //Determine whether it is a proxy class return proxy; } return getTargetObject(getProxyTargetObject(proxy)); } private static Object getProxyTargetObject(Object proxy) throws Exception { Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); h.setAccessible(true); AopProxy aopProxy = (AopProxy) h.get(proxy); Field advised = aopProxy.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget(); } }
quote
Spring injection method, inherits TestBase
package com.sunrun.tesbase; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import junit.framework.TestCase; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:config/console-context.xml" }) public class BaseTest extends TestCase { protected Logger logger = LoggerFactory.getLogger(getClass()); } package com.sunrun.console.service.impl; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.annotation.Resource; import org.junit.Test; import org.springframework.aop.framework.AdvisedSupport; import org.springframework.aop.framework.AopProxy; import org.springframework.aop.support.AopUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sunrun.console.constant.SysCst; import com.sunrun.console.service.ISettleService; import com.sunrun.mpos.common.core.PropertiesHolder; import com.sunrun.tesbase.BaseTest; import org.junit.Assert; public class SettleServiceImplTestWithBase extends BaseTest{ @Resource private ISettleService settleService; @Test public void suppose_bank_settle_no_is_null() throws Exception{ SettleServiceImpl ssi = (SettleServiceImpl)getTargetObject(settleService);; Method methodConfig = SettleServiceImpl.class.getMethod("configBankSettleNoAndName", StringBuffer.class); methodConfig.setAccessible(true); StringBuffer result = new StringBuffer(""); methodConfig.invoke(ssi, result); System.out.println(result.toString()); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NO)); System.out.println(PropertiesHolder.getValue(SysCst.SettleCst.SETTLE_BANK_NAME)); //String rs = "<bankSettleNo>888888888888</bankSettleNo><bankSettleName>China CITIC Bank Shanghai Branch Business Department</bankSettleName>"; String rs = "<bankSettleNo>7332410182600005752</bankSettleNo><bankSettleName>中信10321325</bankSettleName>"; Assert.assertEquals(rs, result.toString());; } public static Object getTargetObject(Object proxy) throws Exception { if(!AopUtils.isAopProxy(proxy)) { //Determine whether it is a proxy class return proxy; } return getTargetObject(getProxyTargetObject(proxy)); } private static Object getProxyTargetObject(Object proxy) throws Exception { Field h = proxy.getClass().getSuperclass().getDeclaredField("h"); h.setAccessible(true); AopProxy aopProxy = (AopProxy) h.get(proxy); Field advised = aopProxy.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget(); } }