/ / मॉकिटो मॉक से छुटकारा कैसे पाएं

Mockito नकली से छुटकारा पाने के लिए कैसे uninitialized पढ़ने findbugs चेतावनी - जावा, mockito, findbugs

मैं कैसे इनिशियलाइज़ कर सकता हूँ user तो मैं कर सकता हूँ user.getUserId() बिना वार्बग्स की चेतावनी के?

नए .service.MockUserService () में उपयोगकर्ता का अनधिकृत पढ़ा [.Service.MockUserService] MockUserService.java पर: 21लाइन]

public class MockUserService extends UserService {

public static final String FOO_USER_ID = "fooUser";

@Mock
private User user;


public MockUserService() {
super();
MockitoAnnotations.initMocks(this);
Mockito.when(user.getUserId()).thenReturn(FOO_USER_ID);
}

@Override
public User getUser() {
return getUserSafe();
}

@Override
public User getUserSafe() {
return user;
}
}

उत्तर:

जवाब के लिए 2 № 1

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

वैसे भी खोजने के लिए, चारों ओर घूमना दो संभव समाधान दिया

  • प्रत्येक फ़ील्ड पर फाइंडबग एनोटेशन का उपयोग करें (फाइंडबग्स 3.0.0)

    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="UR",
    justification="This is an auto injected mock")
    
  • या अनदेखा करने के लिए एक फ़िल्टर सेट करें Mock एनोटेशन।

    <Match>
    <Bug code="UR">
    <Field annotation="Mock">
    </Match>
    

ध्यान दें कि ये दोनों छद्म कोड हैं, मैं स्मार्टफोन से लिख रहा हूं। इसलिए अनिवार्य विवरण और / या नियम गायब हो सकते हैं (UR) गलत हो सकता है, बग विवरण ढूंढने वाली वेबसाइट पर है।

ये विचार ज्यादातर से आए:

  1. क्या कोई एकल FindBugs चेतावनी को अनदेखा करने का एक तरीका है?
  2. http://www.scriptscoop2.com/t/0044ed425b4f/java-how-to-set-a-findbugs-filter-for-fields-with-a-specific-annotation.html
  3. http://findbugs.sourceforge.net/bugDescriptions.html

मुझे लगता है कि जिस तरह से इस उदाहरण में मॉकिटो का उपयोग किया गया है वह गलत प्रतीत होता है। यहाँ मेरी सिफारिश है:

  1. User या तो एक इकाई या एक मूल्य वस्तु है जो मैं दृढ़ता से सलाह देता हूं कि ऐसी कक्षाओं का मजाक न उड़ाएं। इनके लिए मैं उपयोग करना पसंद करता हूं बिल्डरों। आमतौर पर मैं क्राफ्ट करता हूं परीक्षा बिल्डर कि तरह इस्तेमाल किया जा सकता है UserBuilder.userWithId(73L).build()
  2. और अंत में मजाक के बजाय UserService पूर्वनिर्धारित उपयोगकर्ता को वापस करने के लिए BDDMockito.given(user_service_mock.getUser()).willReturn(preconfigured_user)