2017-03-22 10 views
11

मेरे कोड, रूप में नीचे हैकैसे अनावश्यक छोटा करते अपवाद को हल करने

@RunWith(MockitoJUnitRunner.class) 
public class MyClass { 

    private static final String code ="Test"; 

    @Mock 
    private MyClassDAO dao; 

    @InjectMocks 
    private MyClassService Service = new MyClassServiceImpl(); 

    @Test 
    public void testDoSearch() throws Exception { 
     final String METHOD_NAME = logger.getName().concat(".testDoSearchEcRcfInspections()"); 
     CriteriaDTO dto = new CriteriaDTO(); 
     dto.setCode(code); 
     inspectionService.searchEcRcfInspections(dto); 
     List<SearchCriteriaDTO> summaryList = new ArrayList<SearchCriteriaDTO>(); 
     inspectionsSummaryList.add(dto); 
     when(dao.doSearch(dto)).thenReturn(inspectionsSummaryList);//got error in this line 
     verify(dao).doSearchInspections(dto); 

     } 
} 

मैं अपवाद नीचे हो रही है

org.mockito.exceptions.misusing.UnnecessaryStubbingException: 
Unnecessary stubbings detected in test class: Test 
Clean & maintainable test code requires zero unnecessary code. 
Following stubbings are unnecessary (click to navigate to relevant line of code): 
    1. -> at service.Test.testDoSearch(Test.java:72) 
Please remove unnecessary stubbings or use 'silent' option. More info: javadoc for UnnecessaryStubbingException class. 
    at org.mockito.internal.exceptions.Reporter.formatUnncessaryStubbingException(Reporter.java:838) 
    at org.mockito.internal.junit.UnnecessaryStubbingsReporter.validateUnusedStubs(UnnecessaryStubbingsReporter.java:34) 
    at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:49) 
    at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:103) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

कृपया मुझे कैसे को हल करने में मदद

उत्तर

4
when(dao.doSearch(dto)).thenReturn(inspectionsSummaryList);//got error in this line 
verify(dao).doSearchInspections(dto); 

when यहां कुछ करने के लिए अपने नकली को कॉन्फ़िगर करता है। हालांकि, इस लाइन के बाद आप किसी भी तरह से इस नकली का उपयोग नहीं करते हैं (verify करने के अलावा)। मॉकिटो आपको चेतावनी देता है कि when लाइन इसलिए व्यर्थ है। शायद आपने तर्क त्रुटि की है?

+0

धन्यवाद आपकी मदद के – VHS

+0

के लिए मैं की जरूरत है दोनों कब और कथनों का सत्यापन कृपया सुझाव है कि स्थानांतरित करने के लिए कैसे आगे – VHS

+2

कॉल यह देखने के लिए कि क्या यह सही तरीके से प्रतिक्रिया करता है, आपकी टेस्ट क्लास ('सेवा') पर एक फ़ंक्शन। आपने यह बिल्कुल नहीं किया, तो आप यहां क्या परीक्षण कर रहे हैं? – john16384

18

@RunWith(MockitoJUnitRunner.class)@RunWith(MockitoJUnitRunner.Silent.class) के साथ बदलें।

+7

आपका स्वागत है। _why_ को समझाने के लिए आपके उत्तर को अपडेट करने के लायक होंगे, उन्हें ओपी को ऐसे कोड को प्रतिस्थापित करना चाहिए। यह उन्हें और भविष्य के आगंतुकों को समझने में मदद करेगा। – Bugs

+5

बीटीडब्ल्यू, यह '@RunWith (MockitoJUnitRunner.Silent.class)' और * नहीं * सीलेंट – fgysin

+0

कोटलिन में है: '@RunWith (MockitoJUnitRunner.Silent :: class) ' – Juancho

2

अपने स्टैक ट्रेस के एक हिस्से को देखते हुए ऐसा लगता है कि आप dao.doSearch() कहीं और स्टब कर रहे हैं। बार-बार एक ही विधि के स्टब्स बनाने की तरह।

Following stubbings are unnecessary (click to navigate to relevant line of code): 
    1. -> at service.Test.testDoSearch(Test.java:72) 
Please remove unnecessary stubbings or use 'silent' option. More info: javadoc for UnnecessaryStubbingException class. 

उदाहरण के लिए टेस्ट क्लास नीचे पर विचार करें:

@RunWith(MockitoJUnitRunner.class) 
public class SomeTest { 
    @Mock 
    Service1 svc1Mock1; 

    @Mock 
    Service2 svc2Mock2; 

    @InjectMock 
    TestClass class; 

    //Assume you have many dependencies and you want to set up all the stubs 
    //in one place assuming that all your tests need these stubs. 

    //I know that any initialization code for the test can/should be in a 
    //@Before method. Lets assume there is another method just to create 
    //your stubs. 

    public void setUpRequiredStubs() { 
     when(svc1Mock1.someMethod(any(), any())).thenReturn(something)); 
     when(svc2Mock2.someOtherMethod(any())).thenReturn(somethingElse); 
    } 

    @Test 
    public void methodUnderTest_StateUnderTest_ExpectedBehavior() { 
     // You forget that you defined the stub for svcMock1.someMethod or 
     //thought you could redefine it. Well you cannot. That's going to be 
     //a problem and would throw your UnnecessaryStubbingException. 
     when(svc1Mock1.someMethod(any(),any())).thenReturn(anyThing);//ERROR! 
     setUpRequiredStubs(); 
    } 
} 

मैं नहीं बल्कि अपने परीक्षण पुनर्रचना ठूंठ जहां आवश्यक करने के लिए विचार कर रहा होगा।

0

आप इस शैली का प्रयोग कर रहे हैं तो बजाय:

@Rule 
public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS); 

साथ बदलें:

@Rule 
public MockitoRule rule = MockitoJUnit.rule().silent(); 
संबंधित मुद्दे