2015-07-04 226 views
0

我正在寫下一個Junit測試類「ServiceImplTest.java」以下方法,但它在獲得null的同時嘗試Marshall xmlRequest。 任何人都可以幫我解決這個問題,請。提前致謝。Junit - 嘲笑靜態方法

ServiceImplTest.java

@RunWith(PowerMockRunner.class) 
@PrepareForTest({RequestXmlBuilder.class}) 
public class ServiceImplTest { 
    @Before 
    public void setUp() throws Exception { 
     PowerMockito.mockStatic(RequestXmlBuilder.class); 
    } 

    @Test 
    public void testExecute() throws Exception { 
     PowerMockito.when(RequestXmlBuilder.serviceMarshall(Request, jaxb2Marshaller)).thenReturn("XmlTest"); 
    } 
} 

ServiceImpl.java

public class ServiceImpl { 
    public Response execute() { 
     String xmlRqst = RequestXmlBuilder.serviceMarshall(request, jaxb2Marshaller); 
    } 
} 

RequestXmlBuilder.java

public class RequestXmlBuilder { 
    public static String serviceMarshall(Request request, Jaxb2Marshaller jaxb2Marshaller) 
      throws JAXBException { 
     StringWriter requestXml = new StringWriter(); 
     jaxb2Marshaller.marshal(request, new StreamResult(requestXml)); 
     return requestXml.toString(); 
    } 
} 

注意:在以下語句中獲得空值

jaxb2Marshaller.marshal(request, new StreamResult(requestXml)); 
+1

可能是一個問題,在您的匹配:'PowerMockito.when(RequestXmlBuilder.serviceMarshall(任何(Request.class),任何(Jaxb2Marshaller.class)))。然後返回(「XmlTest」);'注意'import static org.mockito.Matchers.any;'你可以試試嗎? – troig

+0

它很好。非常感謝你@troig – Mohan

+0

歡迎您,我已將其作爲答案發布。很高興幫助你! – troig

回答

1

您沒有正確定義您的matchers。你可以通過改變它:

PowerMockito.when(RequestXmlBuilder.serviceMarshall(any(Request.class), any(Jaxb2Marshaller.class))).thenReturn("XmlTest"); 

對進口任何的Mockito匹配,具體如下:

import static org.mockito.Matchers.any; 

乾杯