मैं एक आवेदन जिसका MainForm गतिशील बनाता है खुद को फ्रेम करने के लिए DUnit साथ एक जीयूआई इकाई परीक्षण चलाने के लिए कोशिश कर रहा हूँ। मैं टेस्ट केस में फॉर्म के रूप में एप्लिकेशन-टू-टेस्ट के मुख्य प्रारूप को बनाने और इसके मेनू आइटम आदि तक पहुंचने में सक्षम हूं।डुनिट जीयूआई परीक्षण: क्या मैं 'एप्लिकेशन' को एक अलग "फॉर्म" पर मजबूर कर सकता हूं?
समस्या तब होती है जब एप्लिकेशन गतिशील रूप से फ्रेम बनाने की कोशिश करता है। फ्रेम का संसाधन पढ़ने एक बिंदु पर आता है जहां इसे विंडो हैंडल की आवश्यकता होती है (मेरे मामले में, टैब शीट का कैप्शन सेट करना)। यहां यह TWinControl.GetHandle से TWinControl.CreateWnd और TCustomFrame.CreateParams से जाता है।
इस CreateParams में, कोड का कहना है:
if Parent = nil then
Params.WndParent := Application.Handle;
यह जहां अंतर होता है। जब मैं वास्तविक एप्लिकेशन (परीक्षण में नहीं) चलाता हूं, तो एप्लिकेशन। यहां हैडल एक गैर-शून्य संख्या देता है और प्रवाह ठीक रहता है। लेकिन DUnit परीक्षण आवेदन में, Application.Handle यहाँ रिटर्न 0. यह कह रही है कि फ्रेम एक जनक नहीं है एक अपवाद को बढ़ाने के लिए TWinControl.CreateWnd में कोड का कारण बनता है:
with Params do
begin
if (WndParent = 0) and (Style and WS_CHILD <> 0) then
if (Owner <> nil) and (csReading in Owner.ComponentState) and
(Owner is TWinControl) then
WndParent := TWinControl(Owner).Handle
else
raise EInvalidOperation.CreateFmt(SParentRequired, [Name]);
मैं चाहते हैं परीक्षणों के कारण "उत्पादन" कोड को संशोधित किए बिना इस समस्या (और सामान्य रूप से, सभी परीक्षण समस्याओं) को पाने का प्रयास करें। क्या आप किसी भी तरह के संकेतों को किसी भी तरह से "एप्लिकेशन" को किसी अन्य चीज़ पर मजबूर कर सकते हैं, या किसी अन्य तरीके से इस पर काम कर सकते हैं?
कोड को देखते हुए, मालिक को प्राप्त करने का प्रयास करने के लिए एक संभावित अन्य कामकाज परिदृश्य हो सकता है (जो मेरा "मेनफॉर्म" एप्लिकेशन-टू-टेस्ट है, यानी जिसका संभाल मैं प्राप्त करना चाहता हूं) परीक्षण में इस फ्रेम निर्माण करते समय राज्य को पढ़ना, लेकिन कम से कम शुरुआत में ऐसा होने के लिए यह इतना सरल नहीं लगता है।
क्या आपके डीआरपी के पास आवेदन है। आरंभ करें? शायद यह हैंडल सेट करता है। – mjn
मेरे टेस्ट-ऐप और वास्तविक ऐप दोनों में एप्लिकेशन है। अपने डीपीआर में शुरू करें। मैं यह देखने के लिए शुरूआत के माध्यम से कदम उठाने का प्रयास कर सकता हूं कि क्या मुझे एक जगह मिल सकती है जहां आवेदन। हैंडल कुछ पर सेट है या नहीं। – DelphiUser
डुनीट मुझे जीयूआई का परीक्षण करने के लिए सबसे अच्छा नहीं लगता है। – GolezTrol