2010-05-11 12 views
5

से इकाई परीक्षण qtestlib चलाने के लिए मैं क्यूटी निर्माता में एक जीयूआई आवेदन के विकास कर रहा हूँ और इसके लिए कुछ इकाई परीक्षण लिखना चाहते हैं।कैसे QtCreator

मैं QtTestlib के साथ कुछ इकाई परीक्षण बनाने के लिए This guide पीछा किया और कार्यक्रम ठीक संकलित करता है। लेकिन मैं उन्हें कैसे चला सकता हूं? मैं जीयूआई ऐप शुरू होने से पहले उन्हें चलाने के लिए चाहूंगा अगर डिबग खरीदता है और रिहाई के निर्माण के दौरान नहीं चलता है।

उत्तर

4

अंत में पता लगाया गया कि ऐप शुरू करने से पहले परीक्षण कैसे चलाएं।

मैं परीक्षण वर्ग में एक स्थिर विधि परीक्षण चलाने के लिए कहा:

#include <QtTest/QtTest> 

TestClass::runTests() 
{ 
    TestClass * test = new TestClass(); 

    QTest::qExec(test); 
    delete test; 
} 

मुख्य कार्य में, कार्य करें:

int main(int argv, char *args[]) 
{ 
    ::TestsClas::runTests(); 

    QApplication app(argv, args); 
    MainWindow mainWindow; 
    mainWindow.setGeometry(100, 100, 800, 500); 
    mainWindow.show(); 

    return app.exec(); 
} 

परीक्षा परिणाम आवेदन उत्पादन विंडो में मुद्रित कर रहे हैं।

+7

आप अपने आवेदन मुख्य को टेस्ट कोड के साथ प्रदूषित नहीं करना चाहते हैं। – jkyle

2

क्यूटी निर्माता अभी तक स्पष्ट रूप से इस समय इकाई परीक्षण चलाने (क्यूटी निर्माता 2.0beta तक) का समर्थन नहीं करता। तो समय के लिए आपको मैन्युअल रूप से परीक्षण शुरू करने की आवश्यकता होगी।

आप qmake के बजाय cmake की तरह एक निर्माण प्रणाली का उपयोग कर रहे हैं तो आप इकाई परीक्षण निर्माण प्रक्रिया का ही एक हिस्सा के रूप में स्वचालित रूप से चलाने की कोशिश कर सकते। दुर्भाग्य से मुझे qmake के साथ ऐसा करने के किसी भी तरीके से अवगत नहीं है। सीएमके को क्यूटी निर्माता द्वारा समर्थित किया जाता है, हालांकि साथ ही क्यूमेक भी नहीं।

+0

व्यक्तिगत रूप से, मुझे सेमेक समर्थन काफी अच्छा लगता है। मैं निर्माता के माध्यम से अपने क्यूटीईटी इकाई परीक्षण कक्षाओं को चलाने के लिए सीटीईएसटी का भी उपयोग करता हूं। एक कस्टम निर्माण विन्यास में। – jkyle

18

अपने मुख्य प्रोजेक्ट में टेस्ट कोड न डालें। आपको अपने यूनिट परीक्षणों के लिए एक अलग प्रोजेक्ट बनाना चाहिए, फिर उसे बनाएं और चलाएं। परीक्षण चलाने के लिए अपनी मुख्य परियोजना को संशोधित न करें।

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

कभी अपने इकाई परीक्षण चलाने के लिए अपने मुख्य आवेदन हैक। यदि आपको एकीकरण स्तर परीक्षण करने की आवश्यकता है (यानी परीक्षण पूरी तरह से संकलित और एकीकृत होने के बाद प्रोग्राम कैसे काम करता है) आपको एक अलग एकीकरण परीक्षण ढांचे का उपयोग करना चाहिए जो आपको प्रोग्राम को बाहरी रूप से लिखित स्रोत से परीक्षण करने की अनुमति देता है। FrogLogic's Squish एक ऐसा ढांचा है।

+0

हाय जेम्स। मान लीजिए कि मेरे पास मेनुलिस्ट वस्तुओं के समूह के साथ एक आवेदन है। क्लिक किए जाने पर प्रत्येक मेनू आइटम एक फॉर्म दिखाता है। मैं एक यूनिट टेस्ट कैसे बना सकता हूं जो मेनू सूची के प्रत्येक आइटम पर क्लिक करता है और सही फॉर्म दिखाया गया है या नहीं? – Owen

+3

आप इसके लिए यूनिट परीक्षण नहीं कर सकते हैं। इस तरह के एकीकृत परीक्षण करने के लिए आपको फ्रोग्लोगिक स्क्विश जैसे कुछ चाहिए। यूआई परीक्षण की तुलना में यूनिट परीक्षण बहुत कम स्तर है। कम से कम जिस तरह से मैं इसे काम समझता हूं।यदि आपको लगता है कि आप इस तरह की चीजें कर सकते हैं तो मुझे जानना अच्छा लगेगा लेकिन मैंने जो कुछ भी पढ़ा है, वह यह कहता है कि यह यूनिट परीक्षण का दुरुपयोग है। –

5

उपयोग कई लक्ष्यों और पूर्वप्रक्रमक झंडे इस लक्ष्य को हासिल करने के लिए:

int main(int argv, char *args[]) 
{ 
#ifdef TEST 
    ::TestsClas::runTests(); 
#endif 
    QApplication app(argv, args); 
    MainWindow mainWindow; 
    mainWindow.setGeometry(100, 100, 800, 500); 
    mainWindow.show(); 

    return app.exec(); 
} 

फिर परियोजनाओं फलक में जाकर "डीबग" को दोहराने के लिए एक नया लक्ष्य "टेस्ट" जोड़ें। कदम बिल्ड के तहत, कि

CXXFLAGS+=-DTEST 

इस तरह परीक्षण टेस्ट लक्ष्य में शामिल है है बनाने के लिए एक तर्क जोड़ने के लिए, लेकिन नहीं डीबग या लक्ष्य को छोड़ दें।

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