programing

Excel VBA 코드 단위 테스트 방법

bestprogram 2023. 4. 27. 22:51

Excel VBA 코드 단위 테스트 방법

엑셀 VBA 코드를 유닛 테스트한 경험이 있는 사람?저는 일부 레거시 Excel VBA 코드에 유닛 테스트를 가능한 한 쉽게 도입하고 싶습니다.제가 생각한 한 가지 아이디어는 VSTO를 사용하여 Excel 워크북 내부에서 코드를 호출하는 것이었습니다.다른 사람들이 엑셀 코드를 유닛 테스트하기 위해 이것을 시도했는지, 그리고 엑셀 VBA를 유닛 테스트하기 위해 사용했을 수 있는 다른 방법이 있는지 알고 싶습니다.

사용 가능한 프레임워크에 대한 몇 가지 조언 및/또는 Excel VBA 코드를 테스트하는 데 필요한 팁을 알려주시면 감사하겠습니다.

고지 사항:저는 Rubberduck의 GitHub 저장소를 소유하고 있으며, 프로젝트에 참여한 개발자 중 한 명입니다.

고무 오리는 현재 개발 중입니다.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 저장소에 있는 유닛 테스트 위키 페이지는 그것을 사용하는 것에 대해 설명할 수 있는 거의 모든 것을 설명합니다.


최신 2.1 프리릴리즈 버전은 표준 라이브러리를 문자 그대로 러버덕 유닛 테스트의 맥락에서 실행될 때 지정된 대로 동작하도록 설정할 수 있는 "테스트 페이크"로 만들어 일반적으로 유닛 테스트를 방해하는 많은 표준 라이브러리 호출을 하이잭하는 데 사용할 수 있는 "가짜" 프레임워크의 시작을 포함합니다.예를들면MsgBox통화:

'@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는 환영할 만합니다.커버링FileSystemObject호출이 특히 유용할 것입니다.

저도 같은 것을 찾고 있었는데, http://accunit.access-codelib.net/ 이라는 VBA IDE에 아주 잘 통합되어 있습니다.

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

xlwings 사람들은 방금 파이썬에서 VBA 기능을 유닛 테스트하는 방법을 시연했습니다.기본적으로 워크북에 아무것도 추가할 필요가 없지만 VBA 함수를 호출하는 "독립형" Python 코드를 작성하여 VBA 함수의 예상 결과와 실제 결과를 비교할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4547487/how-to-unit-test-excel-vba-code