मेरे पास निम्न वर्ग है (इसे पूरी कक्षा दिखाने के बजाय मुद्दे पर ध्यान केंद्रित करने के लिए संघनित किया गया है):

@Component
public class ABCDEF {

    private final Helper helper;
    private final URI uri;

    public ABCDEF(Helper helper, @Value("${endpoint.url}") URI uri) {
        this.helper = helper;
        this.uri = uri;
    }

    public void b(){
        helper.toString();
    }
}

इसके परीक्षण के लिए, मैं निम्नानुसार मोक्स इंजेक्ट करना चाह रहा हूं लेकिन यह काम नहीं कर रहा है। सहायक शून्य के रूप में आता है और मुझे यूआरआई अपवाद फेंकने में सक्षम होने के लिए एक डिफ़ॉल्ट कन्स्ट्रक्टर जोड़ना पड़ता है।

कृपया इसके लिए कोई उपाय सुझाएं ताकि आप मॉक को ठीक से इंजेक्ट कर सकें। धन्यवाद।

@RunWith(JUnitMockitoRunner.class)
public class ABCDEFTest {

    @Mock
    private Helper helper;

    @InjectMocks
    private ABCDEF abcdef = new ABCDEF(
            helper,
            new URI("test")
    );

    // adding just to be able to throw Exception
    public ABCDEFTest() throws URISyntaxException {
    }

    @Test
    public void b() {
        abcdef.b();
    }
}

नोट: मॉकिटो संस्करण 1.10.19 का उपयोग करना। इस संस्करण से चिपके रहने की आवश्यकता होगी।

1
karvai 5 मार्च 2020, 16:41
1
InjectMocks का इस्तेमाल कभी नहीं किया। परीक्षण के मुख्य भाग में केवल ABCDEF abcdef = new ABCDEF(helper, new URI("test")) लिखने में क्या गलत है?
 – 
Michael
5 मार्च 2020, 16:49
2
या तो `= new ABCDEF(helper, new URI("test"))` को हटा दें और मॉकिटो को सीधे अपने मॉक इंजेक्ट करने दें। या @InjectMocks को हटा दें और @Before के साथ एनोटेट की गई एक विधि जोड़ें, जहां आप स्वयं abcdef को इंस्टेंट करते हैं
 – 
Lino
5 मार्च 2020, 16:54

1 उत्तर

सबसे बढ़िया उत्तर

यह काम करना चाहिए:

@RunWith(MockitoJUnitRunner.class)
public class ABCDEFTest {

    @Mock
    private Helper helper;

    private ABCDEF abcdef;

    @Before
    public void setUp() throws URISyntaxException {
        abcdef = new ABCDEF(
                helper,
                new URI("test")
        );
    }


    @Test
    public void b() {
        abcdef.b();
    }
}

या, @RunWith का उपयोग करने के बजाय, आप setUp विधि के अंदर नकली प्रारंभ कर सकते हैं:

public class ABCDEFTest {

    private Helper helper;

    private ABCDEF abcdef;

    @Before
    public void setUp() throws URISyntaxException {
        helper = Mockito.mock(Helper.class);
        abcdef = new ABCDEF(
                helper,
                new URI("test")
        );
    }


    @Test
    public void b() {
        abcdef.b();
    }
}
1
amseager 5 मार्च 2020, 17:01