jmockit 中文网 springbean

 

如今,我们的很多应用程序是基于Spring的,通过Spring IOC容器来管理我们的Java对象。所以这里单独提出对Spring Bean如何Mock方法。

以上述提到如何Mock类中的提到的AnOrdinaryClass为例,先把这个类配置在Spring的配置文件中

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0" encoding="utf-8"?> <!--suppress ALL --> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"     xmlns:p="http://www.springframework.org/schema/p"     xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-2.5.xsd         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"     default-autowire="byName">      <!-- 1个普通的spring bean-->     <bean id="anOrdinaryBean" class="cn.jmockit.demos.AnOrdinaryClass" />    </beans>

 

 

同样地,讲述2种Mock方法

    1. 用Expectations来Mock。

       

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 //用Expectations来Mock Spring Bean @ContextConfiguration(locations = { "/META-INF/applicationContext1.xml" }) @RunWith(SpringJUnit4ClassRunner.class) public class SpringBeanMockingByExpectationsTest {     // 注入Spring Bean,Mock这个实例,就达到了Mock Spring Bean的目的     @Resource     AnOrdinaryClass anOrdinaryBean;       @Test     public void testSpringBeanMockingByExpectation() {         // 直接把实例传给Expectations的构造函数即可Mock这个实例         new Expectations(anOrdinaryBean) {             {                 // 尽管这里也可以Mock静态方法,但不推荐在这里写。静态方法的Mock应该是针对类的                 // mock普通方法                 anOrdinaryBean.ordinaryMethod();                 result = 20;                 // mock final方法                 anOrdinaryBean.finalMethod();                 result = 30;                 // native, private方法无法用Expectations来Mock             }         };         Assert.assertTrue(AnOrdinaryClass.staticMethod() == 1);         Assert.assertTrue(anOrdinaryBean.ordinaryMethod() == 20);         Assert.assertTrue(anOrdinaryBean.finalMethod() == 30);         // 用Expectations无法mock native方法         Assert.assertTrue(anOrdinaryBean.navtiveMethod() == 4);         // 用Expectations无法mock private方法         Assert.assertTrue(anOrdinaryBean.callPrivateMethod() == 5);     }       @BeforeClass         // 加载AnOrdinaryClass类的native方法的native实现         public static void loadNative() throws Throwable {             JNITools.loadNative();         }     }
  1. 用MockUp来Mock

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 //用MockUp来Mock Spring Bean @ContextConfiguration(locations = { "/META-INF/applicationContext1.xml" }) @RunWith(SpringJUnit4ClassRunner.class) public class SpringBeanMockingByMockUpTest {     // 注入Spring Bean,Mock这个实例,就达到了Mock Spring Bean的目的     @Resource     AnOrdinaryClass anOrdinaryBean;       @Test     public void testSpringBeanMockingByMockUp() {         // 静态方法被mock了         Assert.assertTrue(AnOrdinaryClass.staticMethod() == 10);         // 普通方法被mock了         Assert.assertTrue(anOrdinaryBean.ordinaryMethod() == 20);         // final方法被mock了         Assert.assertTrue(anOrdinaryBean.finalMethod() == 30);         // native方法被mock了         Assert.assertTrue(anOrdinaryBean.navtiveMethod() == 40);         // private方法被mock了         Assert.assertTrue(anOrdinaryBean.callPrivateMethod() == 50);     }       @BeforeClass     public static void beforeClassMethods() throws Throwable {         loadNative();         // 必须在Spring容器初始化前,就对Spring Bean的类做MockUp         addMockUps();     }                 // 加载AnOrdinaryClass类的native方法的native实现         public static void loadNative() throws Throwable {             JNITools.loadNative();         }           // 对AnOrdinaryClass的Class     public static class AnOrdinaryClassMockUp extends MockUp<AnOrdinaryClass> {         // Mock静态方法         @Mock         public static int staticMethod() {             return 10;         }           // Mock普通方法         @Mock         public int ordinaryMethod() {             return 20;         }           @Mock         // Mock final方法         public final int finalMethod() {             return 30;         }           // Mock native方法         @Mock         public int navtiveMethod() {             return 40;         }           // Mock private方法         @Mock         private int privateMethod() {             return 50;         }     }       // 添加MockUp     public static void addMockUps() {         new AnOrdinaryClassMockUp();     } }
上一篇:springbean的作用域有哪些,它的注册方式有几种


下一篇:Kmens算法