powermock測試

一、導入依賴包html

<!-- 單元測試-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.8.47</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>1.7.1</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>mockito-core</artifactId>
                    <groupId>org.mockito</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>1.7.1</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>objenesis</artifactId>
                    <groupId>org.objenesis</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>mockito-core</artifactId>
                    <groupId>org.mockito</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 單元測試-->

二、編寫測試類java

@PowerMockIgnore({ "javax.management.*" })
public class OrderServiceImplTest {

   /**
     * 注入測試對象類
     */
    @InjectMocks
    private OrderService orderService; 
 
    /**
     * 注入須要mock的類(orderService類中存在調用myOrderService的方法)
     */
    @Mock
    private MyOrderService myOrderService;

     /**
     * 初始化
     */
    @Before
    public void before() {
    orderService = new OrderServiceImpl();
    myOrderService = PowerMockito.mock(MyOrderService.class);
    //第二個參數必須和OrderServiceImpl類中對MyOrderService類中的引用myOrderService一致
   ReflectionTestUtils.setField(orderService,"myOrderService",myOrderService);      
    }

    @Test
    public void testCreateOrder {
    //對所測試類中調用其餘包中的方法進行mock,方法參數可隨意化,但返回的對象必需要保證不發生空指針,即須要賦值的地方及時賦值。
    ResultBean result = new ResultBean();
    result.setCode("200");
   Mockito.when(myOrderService.checkOnlyPrice(Mockito.any(OrderDO.class))).thenReturn(result);

    //此參數需實例化
    MessageBO messageBO =orderService.createOrder("test");
    //斷言
    Assert.assertEquals(messageBO.getCode(), "200");
    }
	
		//異常測試
		@Test
    public void testCreateOrderException {
    	Mockito.when(myOrderService.checkOnlyPrice(Mockito.any(OrderDO.class))).thenThrow(new DataAccessException(""));//業務層catch的異常
    	
    	try {
            accountDataService.getBFinAtAccountDataList("");
        } catch (Exception e) {
            Assert.assertTrue(e instanceof BusinessException);//業務層throw的異常
        }
    }
}    
相關文章
相關標籤/搜索