2010-12-28 8 views
29

단위 테스트 Excel VBA 코드를 사용한 경험이있는 사람이 있습니까? 가능한 한 힘들이지 않고 일부 기존 Excel VBA 코드에 단위 테스트를 도입하려고합니다. 한 가지 생각은 VSTO를 사용하여 Excel 통합 문서에서 코드를 호출하는 것입니다. 다른 사람들이 Excel 코드를 단위 테스트하는 목적으로 이것을 시도했는지, Excel VBA 단위 테스트에 사용할 수있는 다른 방법이 있는지 알고 싶습니다.단위 테스트 Excel VBA 코드

일부 유용한 프레임 워크 및/또는 Excel VBA 코드 단위 테스트 팁에 대한 조언을 주시면 감사하겠습니다.

+3

관심있는 사용자 : http://stackoverflow.com/questions/1792188/how-to-setup-a-unit-test-in-vba-excel-macro – Fionnuala

+0

감사합니다. –

답변

6

나는 똑같은 것을 찾고 있었고, VBA IDE에 아주 잘 통합되어있는 http://accunit.access-codelib.net/을 발견했다.

참고 : 독일어로 된 페이지를보고 브라우저 번역 도구를 사용하면 영어 페이지보다 많은 정보를 얻을 수 있습니다.

+0

나는 성공없이 Rubberduck를 시도했다. 반면에 AccUnit은 실제로 작동하기 쉽습니다. 그들은 심지어 테스트 클래스를 삽입 할 때 예제를 제공합니다. –

+0

@DavidDuran Rubberduck에 문제가있는 경우 아무에게도 문제가 해결되지 않을 수도 있습니다 ... 피드백은 언제나 환영합니다. [GitHub] (https://github.com/rubberduck-vba/Rubberduck) 또는 [SE 잡담] (https://chat.stackexchange.com/rooms/14929/vba-rubberducking)의 우리의 전쟁 실도. 건배! –

26

면책 조항 : 나는 Rubberduck의 GitHub의 저장소를 소유, 나는이 프로젝트에 포함 된 DEVS 중 하나입니다.

Rubberduck이 활발히 개발 중입니다. 그래도 VBA에 대한 단위 테스트 도구에 비해 훨씬 더,하지만 꽤 잘 작동하고 당신이 어떤 상용구없이 거의 VBA 단위 테스트를 작성할 수 있습니다 : 다음

'@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 

그리고 당신은 탐색과 시험 방법을 실행에 도착 도킹 된 툴바 윈도우에 arrange-act-assert 메소드 스텁을 신속하게 추가 할 수있는 메뉴를 제공하고 AssertClass도 런타임에 바인딩 할 수 있으므로 개발시 이외에 Rubberduck를 배치 할 필요가 없습니다 환경은 코드를 컴파일 할 수 있도록 유지합니다.


Rubberduck의 GitHub의 저장소에 unit testing wiki page

은 그것을 사용하는 방법에 대한 설명이 거의 모든 것을 설명합니다.

최신 2.1 시험판 버전

는 일반적으로 문자로 표준 라이브러리를 설정하여, 단위 테스트를 방해하는 표준 라이브러리 호출의 수를 납치하는 데 사용할 수있는 "가짜"프레임 워크의 시작을 포함

'@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 

기여가 더 많은 기능을 환영합니다 이상입니다 충당하기 위해 그 Fakes API를 확장 : 지정된 예를 들어, Rubberduck 단위 테스트의 맥락에서 MsgBox 호출을 실행하면 설치가 동작하도록 할 수있다 "테스트 가짜". 커버 FileSystemObject 호출은 특히 유용 할 것입니다.

3

xlwings 사람들이 방금 unit tests VBA functions in Python을 시연했습니다. 본질적으로 통합 문서에 아무 것도 추가 할 필요는 없지만 VBA 함수를 호출하는 "독립 실행 형"Python 코드를 작성하여 VBA 함수의 예상 결과와 실제 결과를 비교할 수 있습니다.