DUnit ile bir GUI birim sınamasını, ana formu dinamik olarak çerçeveler oluşturmaya çalışan bir uygulamaya çalıştırmaya çalışıyorum. Uygulamada sınama uygulamasının ana formunu sınama durumunda bir form olarak oluşturabildim ve menü öğelerine vb. Erişebildim.DUnit GUI Test: 'Uygulamayı' farklı bir 'forma' zorlayabilir miyim?
Sorun, uygulama dinamik olarak bir çerçeve oluşturmaya çalıştığında ortaya çıkıyor. Çerçevenin kaynak okuması, pencere tanıtıcısına ihtiyaç duyduğu bir noktaya gelir (benim durumumda, bir sekme sayfasının altyazısını ayarlama). İşte TWinControl.GetHandle'den TWinControl.CreateWnd ve TCustomFrame.CreateParams'a gider. Bu CreateParams yılında
, kod diyor ki:
if Parent = nil then
Params.WndParent := Application.Handle;
fark meydana yerdir. Gerçek uygulamayı çalıştırdığımda (testte değil), Application.Handle burada sıfır olmayan bir sayı döndürür ve akış devam eder.
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]);
İsterdim Ama Dunit testi yapılırken, Application.Handle Buradaki çerçeve bir ebeveyni olmadığını bildiren bir istisna yükseltmek TWinControl.CreateWnd kod neden 0. döndürür Sadece testler nedeniyle "üretim" kodunu değiştirmeden bu problemi (ve genel olarak tüm test problemlerini) aşmaya çalışın. "Uygulamayı" bir şekilde başka bir şeye zorlayabileceğimi veya başka bir şekilde bu konuda çalışıp çalışamayacağına dair herhangi bir ipucu verebilir misiniz?
Kod bakıldığında, olası bir diğer geçici senaryo senaryonun sahibi olmak için (ki bu da benim testim için "MainForm", yani tanıtıcıdan almak istediğim) csHızda bu çerçeveyi oluştururken okuma durumu, ancak en azından başlangıçta bunun gerçekleşmesi çok basit görünmez.
Sizin dpr'niz bir Application.Initialize var mı? Belki de bu sapı ayarlar. – mjn
Hem test uygulamam hem de gerçek uygulamada, dpr'lerinde Application.Initialize var. Application.Handle'ın bir şeye ayarlanmış veya bulunmadığı bir yer bulabileceğimi görmek için başlatmaları adım adım deneyebilirim. – DelphiUser
DUnit, bir GUI'yi test etmek için en iyi değil gibi görünüyor. – GolezTrol