2012-01-06 16 views
5

के माध्यम से डीबी के साथ संचार करने वाली कक्षा का परीक्षण करना मैं एंड्रॉइड ऐप बनाने में एक टीडीडी दृष्टिकोण लेने की कोशिश कर रहा हूं। मैं परीक्षण के लिए ORMLite और Mockito/Robolectric का उपयोग कर रहा हूँ। मैं एक साधारण बात का परीक्षण समस्या आई है:ओआरएमएलआईटी के डीएओ

public List<ITask> getTasksForNextTwoWeeks() throws SQLException { 
    // Code to be written 
} 

खैर (कुछ वर्ग रैपिंग अप डीएओ कॉल में विधि)

, कोड के अंदर सिर्फ एक उचित क्वेरी विधि कॉल किया जाएगा।

उस कोड का परीक्षण करने के लिए सबसे अच्छा तरीका क्या है? मैं इसके बारे में सोच रहा हूं, लेकिन असली डेटाबेस तक पहुंचने के बिना समाधान के बारे में सोच नहीं सकता (चाहे असली या परीक्षण एक हो)।

कोई भी सुझाव आपका स्वागत है।

+0

टीडीडी के लिए +1, और रोबोलेक्ट्रिक/मॉकिटो कॉम्बो। –

उत्तर

2

एचआरएम। यह इस बात पर निर्भर करता है कि आप अपनी दाओ कक्षा कैसे बना रहे हैं। ORMLite के तहत, दाओ क्लास एक इंटरफ़ेस है जिसका अर्थ है कि कुछ तारों के साथ, आप एक मॉक किए गए डीएओ को इंजेक्ट करने में सक्षम होना चाहिए और नकली के माध्यम से क्वेरी कॉल को संभालना चाहिए।

public void setDao(Dao<ITask, String> dao) { 
    this.dao = dao; 
} 

private Dao<ITask, String> getDao() { 
    if (dao != null) { 
     // typical ORMLite pattern 
     dao = getHelper().getITaskDao(); 
    } 
    return dao; 
} 

फिर अपने getTasksForNextTwoWeeks() विधि की तरह कुछ करना होगा::

उदाहरण के लिए, अगर आप इस तरह अपने रैपिंग वर्ग sorta पर एक setDao विधि हो सकता था

public List<ITask> getTasksForNextTwoWeeks() throws SQLException { 
    QueryBuilder<ITask, String> qb = getDao().getQueryBuilder(); 
    qb.where().gt(...); 
    return qb.query(); 
} 

लेकिन यह एक अच्छा सा की आवश्यकता है QueryBuilder प्राप्त करने के लिए नकली आईएनजी।

हम जो करते हैं वह ORMLIte Dao इंटरफ़ेस का विस्तार करता है और getTasksForNextTwoWeeks() जैसे ITaskDao कक्षा में मेटोड जोड़ता है।

public interface ITaskDao extends Dao<ITask, String> { 
    public List<ITask> getTasksForNextTwoWeeks() throws SQLException; 
    ... 
} 

तो आप आसानी से डेटाबेस कार्यों के सभी ITaskDao और बाईपास बाहर नकली कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

अब मैं सोच रहा हूं, अगर डीएओ को एक इकाई के रूप में जांचना बेहतर है या डीबी के सामने एकीकरण परीक्षण करना बेहतर है। Mocking QueryBuilder एक overcomplication की तरह दिखता है। – LordTwaroog

+0

सहमत हुए। जैसा कि मैंने उल्लेख किया है, मैं दाओ को नकल करने के लिए आपके अधिकांश कार्यक्रमों की अनुशंसा करता हूं। लेकिन आपको अभी भी 'आईटास्कडाओ' कक्षा का परीक्षण करने की आवश्यकता होगी। – Gray

4

मैं ग्रे की प्रतिक्रिया का प्रशंसक नहीं हूं, क्योंकि इससे चीजें बहुत जटिल होती हैं। मैं आप बस के बजाय में स्मृति डेटाबेस बनाने के लिए, एक डेटाबेस नाम के रूप में अशक्त पारित करके की सिफारिश:

OrmLiteSqliteOpenHelper(context,null, null, DATABASE_VERSION); 

इस तरह आप द्वारा एक परीक्षण में आपके प्रश्नों का परीक्षण कर सकते क) नकली तत्वों ख) परीक्षण करता है, तो जोड़ने आपका SqliteOpenHelper -वापर सही परिणाम देता है

इस तरह की प्रत्येक परीक्षा आपके वास्तविक डेटाबेस और आपके सूट में अन्य परीक्षणों से पूरी तरह से स्वतंत्र है।

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