2016-09-01 4 views
6

नकली कैसे करें मैं एक इंटरफ़ेस का मज़ाक लगाने की कोशिश कर रहा हूं।एक इंटरफेस जावा पावरमोकिटो

public interface FlowCopyParamsBusinessManager { 
List<FlowCopyParams> findByAppli(String application, String sourcePattern) 
     throws FlowCopyParamsBusinessException; 

}

मेरे कोड में, जब मैं findByAppli इस विधि कहते हैं, मैं FlowCopyParams की एक सूची प्रदान करना चाहते हैं।

List<FlowCopyParams> lstFlowCopyParams = flowCopyParamsBusinessManager.findByAppli(
        "TOTO","TATA); 

यहाँ कक्षा की परीक्षा में मेरी कोशिश:

@BeforeClass 
public static void mockBeanIn() throws Exception { 
List<FlowCopyParams> flowCopyParamsList = new ArrayList<>(); 

PowerMockito.spy(FlowCopyParamsBusinessManager.class); 
PowerMockito.when(FlowCopyParamsBusinessManager.class, "findByAppli", Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); 
} 

मैं इस त्रुटि है:

java.lang.IllegalArgumentException: object is not an instance of declaring class 

मैं नहीं जानता कि क्यों क्योंकि विधि findByAppli दो स्ट्रिंग पैरामीटर होना आवश्यक है, और मैंने Mockito.anyString() रखा और मेरे पास अभी भी IllegalArgumentExcepti है पर।

कोई सुराग?

Thxs।

उत्तर

7

आपको PowerMockito का उपयोग करने की आवश्यकता नहीं है, और इसके इंटरफ़ेस के रूप में, आपको जासूसी करने की आवश्यकता नहीं है() क्योंकि आप किसी भी गैर-लॉक लॉजिक पर निर्भर नहीं हैं।

ऐसा किया जा सकता है, आपकी टेस्ट क्लास में कक्षा चर परिभाषित किया गया है।

private FlowCopyParamsBusinessManager flowCopyParamsBusinessManagerMock; 

एक @Before एनोटेट विधि में:

flowCopyParamsBusinessManagerMock = Mockito.mock(FlowCopyParamsBusinessManager.class); 
List<FlowCopyParams> flowCopyParamsList = new ArrayList<>(); 
when(flowCopyParamsBusinessManagerMock 
.findByAppli(Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); 

फिर अपने परीक्षण में flowCopyParamsBusinessManagerMock को देखें।

+0

मुझे यह भी पता नहीं है कि कौन सा जासूस ठोस रूप से करता है। – Kikou

+0

जासूस आपको वस्तु के मूल ठोस क्रियान्वयन के हिस्सों (विधियों) का उपयोग करने की अनुमति देता है जबकि नकली मूल कार्यान्वयन प्रदान नहीं करेगा। – UserF40

1

मेरा परीक्षण काम नहीं करता क्योंकि मैं कक्षा को जासूसी करने की कोशिश कर रहा था, फ्लोकोपी पैराम्स बिजनेस मैनेजर.क्लास के उदाहरण पर नहीं।

सबसे पहले, हम नकली बनाने के लिए:

FlowCopyParamsBusinessManager mockFlowCopyParamsBusinessManager = PowerMockito.mock(FlowCopyParamsBusinessManager.class); 

फिर, उदाहरण जासूसी:

PowerMockito.spy(mockFlowCopyParamsBusinessManager); 
PowerMockito.when(mockFlowCopyParamsBusinessManager, "findByAppli", Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); 

यह रूप में अच्छी तरह काम करता है!

+0

मुझे यह त्रुटि स्पष्ट रूप से बताती है कि इंटरफेस को मजाक नहीं किया जा सकता .. कोड ऊपर से कैसे काम कर रहा है? 'मॉकिटो इस वर्ग का नकल नहीं कर सकता: कक्षा org.springframework.security.core.Authentication $$ EnhancerByMockitoWithCGLIB $$ 956 users34 मॉकिटो केवल दृश्यमान और गैर-अंतिम कक्षाओं को नकल कर सकता है। – Dish

0

मैंने कक्षा के शीर्ष पर यह @RunWith (PowerMockRunner.class) रखा है। तो PowerMockito.mock (MyMock.class) के साथ ऑब्जेक्ट मॉक करें; इस तरह का उपयोग एक इंटरफ़ेस या अंतिम कक्षा का नकल कर सकते हैं।

संबंधित मुद्दे