2009-01-19 33 views
8

Khi sử dụng Delphi IDE, nó sẽ âm thầm thay đổi SQLConnection.Connected thành "true" khi điền vào trường hoặc bảng danh sách trong các thuộc tính khác nhau.Làm thế nào để làm cho Delphi DUnit kiểm tra thất bại khi TSQLConnection.Connected = true

Vì tôi không muốn phát hành với Connected = true, tôi cần kiểm tra dunit của mình để thất bại khi TSQLConnection.Connected được để lại đúng trong dfm.

Trả lời

4

Tôi giải quyết vấn đề này theo cách khác. Tôi đã viết một tiện ích nhỏ mà tải một tập tin DFM, và tìm kiếm các thuộc tính mà không nên có mặt. Bao gồm cơ sở dữ liệu.kết nối = giá trị đúng.

Điều này có thể được sửa đổi để làm việc với bất kỳ thuộc tính thích hợp nào. Tôi đã đặt cốt lõi của mã ở đây.

Để làm điều này thực sự hữu ích, bạn nên sử dụng tiện ích này trong tập lệnh xây dựng của mình (tôi sử dụng FinalBuilder). Kịch bản của tôi bắt đầu bằng cách lặp lại các tệp .dfm, loại bỏ bất kỳ thuộc tính nào trong số này, sau đó nó biên dịch và chạy các kiểm tra đơn vị. Nếu họ vượt qua, sau đó nó tiếp tục xây dựng ứng dụng chính. Đối với tôi, đây là một cách tốt hơn so với việc thử nghiệm đơn vị không thành công, vì bạn có thể bắt đầu từ một điểm tốt được bảo đảm.

nState := 0; 
bFound := False; 
for nFileLoop := 0 to memoFile.Lines.Count - 1 do 
begin 
    szLine := memoFile.Lines[nFileLoop]; 

    case nState of  // 
    0: 
    begin 
     if(0 <> Pos('TADOConnection', szLine)) then 
     begin 
      szSeeking := 'Connected'; 
      nState := 1; 
     end 
     else if(0 <> Pos('TADOTable', szLine)) then 
     begin 
      szSeeking := 'Active'; 
      nState := 1; 
     end 
     else if(0 <> Pos('TADOQuery', szLine)) then 
     begin 
      szSeeking := 'Active'; 
      nState := 1; 
     end 
     else if(0 <> Pos('TDBISAMTable', szLine)) then 
     begin 
      szSeeking := 'Active'; 
      nState := 1; 
     end 
     else if(0 <> Pos('TDBISAMDatabase', szLine)) then 
     begin 
      szSeeking := 'Connected'; 
      nState := 1; 
     end 
     else if(0 <> Pos('TDBISAMSession', szLine)) then 
     begin 
      szSeeking := 'Active'; 
      nState := 1; 
     end 
     else if(0 <> Pos('TDBISAMQuery', szLine)) then 
     begin 
      szSeeking := 'Active'; 
      nState := 1; 
     end; 
    end; 
    1 : 
    begin 
     bFound := True; 
     if(0 <> Pos('end', szLine)) then 
     begin 
      nState := 0; 
     end 
     else if(0 <> Pos(szSeeking, szLine)) then 
     begin 
      nPos := Pos('=', szLine); 
      if nPos > 0 then 
      begin 
       memoFile.Lines[nFileLoop] := Copy(szLine, 1, nPos) + ' False'; 
      end; 
     end; 
    end; 
    end;  // case 
end; 
5

Bạn có thể viết hậu duệ của riêng bạn TSQLConnection rằng không lưu trữ tài sản được kết nối của nó:

TdzAdoConnection = class(TADOConnection) 
    published 
    property Connected stored false; 
    end; 

và sử dụng thành phần đó chứ không phải là TSqlConnection.

(Trên đây là cho TAdoConnection, nhưng TSQLConnection cũng nên hoạt động tốt.)

9

GExperts có một chuyên gia "Set Component Properties" mà chúng ta cấu hình để đóng kết nối cơ sở dữ liệu trên tất cả các biên dịch. Kể từ khi làm điều đó, chúng tôi đã không có vấn đề.

+0

ngọt ngào, không bao giờ biết rằng đã tồn tại. cảm ơn. – TrevorD

1

OpenCTF - Khung kiểm tra thành phần cho Delphi có thể thú vị, nó sẽ tự động tạo các kiểm tra đơn vị cho các thuộc tính được chỉ định của tất cả các thành phần trong tất cả các biểu mẫu/datamodules. Nó là mã nguồn mở và dễ sử dụng.

"Bắt đầu" tài liệu: http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf

Thành phần OpenCTF kiểm tra khuôn khổ giúp xây dựng các bài kiểm tra tự động cho tất cả các thành phần VCL (thị giác và không nhìn) trong một ứng dụng Delphi. Nó dựa trên trên khung công tác DUnit.

Một số ví dụ sử dụng:

  • phát hiện thiếu hoặc giá trị tài sản sai - ví dụ Các nút không có Tác vụ được chỉ định, Nguồn dữ liệu mà không được kết hợp Số liệu
  • phát hiện trình xử lý sự kiện chưa được gán - ví dụ: thiếu OnExecute kiện
  • kiểm tra rằng tất cả các DataSet có thể được mở
  • séc thứ tự tab
  • tìm các thành phần vô hình (ví dụTabsheets vô hình mà tốt hơn nên được ẩn khi chạy)

OpenCTF http://www.mikejustin.com/images/OpenCTF.gif

+0

Thiếu liên kết: http://openctf.sourceforge.net/ – EMBarbosa

0

Một cách tiếp cận cho vấn đề này là để thực hiện một cam kết trước móc vào SCM của bạn. Tôi sử dụng TortoiseSVN, và tôi đã làm những việc tương tự để ngăn chặn mọi thứ lén lút. Ví dụ, chúng tôi có một thư viện "da" cố gắng thêm khoảng một chục đơn vị da vào bất kỳ biểu mẫu nào bạn mở trong IDE. (Chúng tôi đã có một bản vá đăng ký "sửa" hành vi này, nhưng nó bị "không thực hiện" một lần trong một thời gian, nếu một nhà phát triển cài đặt lại các thành phần). Vì vậy, tôi đã có một "danh sách chuỗi bị cấm" trong một tập tin .ini đó là trong một SVN trước cam kết móc.

Trong môi trường của chúng tôi, tất cả mã sản xuất đều được xây dựng trên một "máy xây dựng" chuyên dụng, vì vậy nếu mã không được đăng ký, nó sẽ không được đưa vào bản dựng. Đã giải quyết được sự cố.

Các vấn đề liên quan