2010-12-28 55 views
29

Có ai có kinh nghiệm với đơn vị kiểm tra mã VBA Excel không? Tôi muốn giới thiệu các bài kiểm tra đơn vị vào một số mã VBA Excel cũ không đau đớn nhất có thể. Một ý tưởng tôi sẽ sử dụng VSTO để gọi mã từ bên trong sổ làm việc Excel. Tôi muốn biết nếu những người khác đã cố gắng này cho mục đích của đơn vị kiểm tra mã Excel, cũng như bất kỳ phương pháp khác mà họ có thể đã sử dụng cho đơn vị kiểm tra Excel VBA.Làm thế nào để kiểm tra đơn vị mã VBA Excel

Tôi sẽ đánh giá cao một số gợi ý về bất kỳ khung công tác và/hoặc mẹo nào có sẵn trên đơn vị kiểm tra mã VBA Excel.

+3

Có thể quan tâm: http://stackoverflow.com/questions/1792188/how-to-setup-a-unit-test-in-vba-excel-macro – Fionnuala

+0

Cảm ơn, tôi sẽ xem xét. –

Trả lời

6

Tôi chỉ tìm kiếm cùng một thứ và tìm thấy: http://accunit.access-codelib.net/ tích hợp vào IDE VBA khá độc đáo.

Lưu ý: Xem trang bằng tiếng Đức và sử dụng công cụ dịch của trình duyệt dường như mang lại nhiều thông tin hơn các trang tiếng Anh.

+0

Tôi đã thử Rubberduck mà không thành công. Mặt khác, AccUnit đã thực sự dễ dàng để làm cho nó hoạt động. Họ thậm chí còn đưa ra các ví dụ khi chèn một lớp thử nghiệm. –

+0

@DavidDuran nếu Rubberduck có một vấn đề, không nói với bất cứ ai sẽ không nhận được nó cố định ... Phản hồi luôn được chào đón, có thể là trên [GitHub] (https://github.com/rubberduck-vba/Rubberduck) hoặc ngay cả phòng chiến tranh của chúng tôi trên [SE chat] (https://chat.stackexchange.com/rooms/14929/vba-rubberducking). Chúc mừng! –

26

Tuyên bố từ chối: Tôi sở hữu kho lưu trữ GitHub của Rubberduck và tôi là một trong những người tham gia dự án.

Rubberduck đang được phát triển tích cực. Đó là nhiều hơn một công cụ kiểm tra đơn vị cho VBA Mặc dù vậy, nhưng nó hoạt động khá tốt và cho phép bạn viết bài kiểm tra đơn vị VBA khá nhiều mà không cần bất kỳ soạn sẵn:

'@TestModule 
Private Assert As New Rubberduck.AssertClass 

'@TestMethod 
Public Sub TestMethod1() 
    Assert.Inconclusive "Test method is not written yet." 
End Sub 

'@TestMethod 
Public Sub AnotherTestMethod() 
    Assert.IsTrue False, "Something's wrong?" 
End Sub 

Và sau đó bạn có thể điều hướng và chạy các phương pháp thử nghiệm của bạn trong cửa sổ công cụ được gắn trên dock cũng cung cấp cho bạn các menu để nhanh chóng thêm sắp xếp-hành động-assert phương pháp sơ khai và AssertClass cũng có thể bị ràng buộc muộn, vì vậy bạn không phải lo lắng về việc triển khai Rubberduck ở bất kỳ đâu ngoài sự phát triển của bạn môi trường chỉ để giữ cho mã có thể biên dịch được.


unit testing wiki page trên kho lưu trữ GitHub của Rubberduck giải thích khá nhiều điều cần giải thích về việc sử dụng nó.


Mới nhất 2.1 phiên bản trước khi phát hành bao gồm sự khởi đầu của một "hàng giả" khuôn khổ có thể được sử dụng để chiếm quyền điều khiển một số lượng cuộc gọi thư viện chuẩn mà thông thường sẽ gây trở ngại cho các bài kiểm tra đơn vị, bởi theo nghĩa đen biến thư viện tiêu chuẩn vào "hàng giả kiểm tra" có thể được thiết lập để hành xử theo quy định khi thực hiện trong bối cảnh của một thử nghiệm đơn vị Rubberduck, ví dụ MsgBox cuộc gọi:

'@TestMethod 
Public Sub TestMethod1() 
    On Error GoTo TestFail 

    Fakes.MsgBox.Returns 42 ' MsgBox function will return 42 

    'here you'd invoke the procedure you want to test 
    Debug.Print MsgBox("This MsgBox isn't going to pop up!", vbOkOnly, "Rubberduck") 'prints 42 

    With Fakes.MsgBox.Verify ' Test will pass if MsgBox was invoked as specified 
     .Parameter "prompt", "This MsgBox isn't going to pop up!" 
     .Parameter "buttons", vbOkOnly 
     .Parameter "title", "Rubberduck" 
    End With 
TestExit: 
    Exit Sub 
TestFail: 
    Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description 
End Sub 

đóng góp để mở rộng mà Fakes API để trang trải nhiều chức năng hơn chào đón. Bao gồm FileSystemObject lời gọi sẽ đặc biệt hữu ích.

3

Các tên xlwings chỉ giới thiệu cách unit tests VBA functions in Python. Về cơ bản, bạn không cần phải thêm bất kỳ thứ gì vào sổ làm việc của mình nhưng bạn viết mã Python "độc lập" gọi hàm VBA của bạn để bạn có thể so sánh kết quả dự kiến ​​so với kết quả thực tế của hàm VBA.

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