2014-06-09 8 views
5

मैं वसंत के लिए नया हूँ और केवल कुछ हद तक JUnit और Mockitoस्प्रिंग jdbcTemplate इकाई परीक्षण

मैं निम्नलिखित विधि है जो एक इकाई परीक्षण की आवश्यकता है

public static String getUserNames(final String userName { 
    List<String> results = new LinkedList<String>(); 
    results = service.getJdbcTemplate().query("SELECT USERNAME FROM USERNAMES WHERE NAME = ?", new RowMapper<String>() { 
     @Override 
     public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
      return new String(rs.getString("USERNAME"); 
     } 
    } 

    return results.get(0);  
    },userName) 

किसी पर कोई भी सुझाव हैं है कि कैसे मैं हो सकता है के साथ अनुभव जुनीट और मॉकिटो का उपयोग करके इसे प्राप्त करें?

अग्रिम में बहुत बहुत धन्यवाद!

+1

आपको परीक्षण अनुप्रयोग संदर्भ को परिभाषित करने की आवश्यकता है जहां SpringPUnit4ClassRunner द्वारा उठाया जाएगा। जैसा कि मैंने देखा है कि आप एकीकरण परीक्षण करने की कोशिश कर रहे हैं, न कि इकाई परीक्षण। ये दो अलग-अलग चीजें हैं। – Vaelyr

+1

विधि के कौन से पहलू आप परीक्षण करना चाहते हैं?आप किस परीक्षण को लिखने की कोशिश करते थे? कुछ काम दिखाओ –

+0

आप जेडीबीसी यूनिट परीक्षण – cchantep

उत्तर

7

आप लाइन के लिए तो एक शुद्ध इकाई परीक्षण करना चाहते हैं तो

service.getJdbcTemplate().query("...."); 

आप सेवा है, तो service.getJdbcTemplate (नकली करने की आवश्यकता होगी) एक नकली जेडीबीसी टेम्पलेट ऑब्जेक्ट को वापस करने के लिए विधि, फिर आपको जिस सूची की आवश्यकता है उसे वापस करने के लिए मैक किए गए जेडीबीसी टेम्पलेट की क्वेरी विधि का नकल करें। कुछ ऐसा:

@Mock 
Service service; 

@Mock 
JdbcTemplate jdbcTemplate; 


@Test 
public void testGetUserNames() { 

    List<String> userNames = new ArrayList<String>(); 
    userNames.add("bob"); 

    when(service.getJdbcTemplate()).thenReturn(jdbcTemplate); 
    when(jdbcTemplate.query(anyString(), anyObject()).thenReturn(userNames); 

    String retVal = Class.getUserNames("test"); 
    assertEquals("bob", retVal); 
} 

उपर्युक्त किसी भी प्रकार के वसंत समर्थन की आवश्यकता नहीं है। यदि आप एक इंटीग्रेशन टेस्ट कर रहे थे जहां आप वास्तव में परीक्षण करना चाहते थे कि डेटा को डीबी से ठीक से खींचा जा रहा था, तो आप शायद स्प्रिंग टेस्ट रनर का उपयोग करना चाहेंगे।

+0

धन्यवाद wxkevin :) – Mat

+0

मैं हूँ निम्नलिखित अपवाद प्राप्त कर रहा है। मैं इस तरह का पालन किया। http://stackoverflow.com/questions/38374823/spring-jdbctemplate-junit – Javadroider

1

आपको ऐसा करने के लिए स्प्रिंग टेस्ट का उपयोग करने की आवश्यकता है।

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:spring-config.xml") 
public class SpringAppTests { 
    @Autowired 
    private HelloService helloService; 

    @Test 
    public void testSayHello() { 
     Assert.assertEquals("Hello world!", helloService.sayHello()); 
    } 
} 

यहाँ आप प्रलेखन से थोड़ी स्पष्टीकरण:

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html

आप @RunWith का उपयोग कर एक परीक्षण बना सकते हैं और @ContextConfiguration के साथ अपने वसंत conf उपयोग करने की आवश्यकता: एक नज़र एक प्रलेखन ले लो :

@Runwith

@Runwith (SpringJUnit4ClassRunner.class), डेवलपर्स मानक JUnit 4.4 यूनिट और एकीकरण परीक्षणों को लागू कर सकते हैं और साथ ही इस तरह के लदान आवेदन संदर्भों के लिए समर्थन, परीक्षण उदाहरणों में से निर्भरता इंजेक्शन, व्यवहार परीक्षण विधि के रूप में TestContext ढांचे का लाभ मिलता रहा निष्पादन, आदि

@ContextConfiguration

@ContextConfiguration परिभाषित वर्ग स्तर के मेटाडाटा कि 012 करने के लिए प्रयोग किया जाता है एकीकरण परीक्षणों के लिए अनुप्रयोग कॉन्टेक्स्ट को लोड और कॉन्फ़िगर करने का तरीका निर्धारित करता है। विशेष रूप से, @Context कॉन्फ़िगरेशन या तो एप्लिकेशन संदर्भ संसाधन स्थान या एनोटेटेड कक्षा घोषित करता है जिसका उपयोग संदर्भ लोड करने के लिए किया जाएगा। आशा है कि मदद करने के लिए

आशा में मदद करने के

+0

के लिए [Acolyte] (http://acolyte.eu.org/) ढांचे पर एक नज़र देख सकते हैं। धन्यवाद Fede .. मुझे लगता है कि मुझे जो हासिल करना है, उसके बारे में और अधिक विशिष्ट होना चाहिए ... मैं जानना चाहता हूं कि JUnit और Mockito के साथ jdbcTemplate.query विधि की वापसी को मॉक करना संभव है ... धन्यवाद – Mat

+0

@ मातृभाषा के लिए क्षमा करें। अगर आप चाहते हैं कि मैं जवाब हटा सकता हूं। बीटीडब्ल्यू, उस मामले में आपको मॉकिटो की ज़रूरत है, आप इस पेज पर एक नज़र डाल सकते हैं http://gojko.net/2009/10/23/mockito-in-six-easy-examples/ –