Отказ от ответственности : У меня есть GitHub-репозиторий Rubberduck, и я один из разработчиков, вовлеченных в проект.
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
А затем вы можете перемещаться и запускать свои методы тестирования в закрепленном окне инструментов, которое также дает вам меню для быстрого добавления заглушек range-act-assert метода, а AssertClass
может иметь позднюю привязку Кроме того, вам не нужно беспокоиться о развертывании Rubberduck где-либо еще, кроме среды разработки, просто для того, чтобы сохранить код скомпилированным.
Вики-страница для модульного тестирования в репозитории Rubberduck GitHub объясняет почти все, что можно объяснить по поводу его использования.
Последние предварительные версии 2.1 включают начало "фальшивых" фреймворков, которые могут быть использованы для перехвата ряда вызовов стандартных библиотек, которые обычно мешают юнит-тестам, буквально превращая стандартную библиотеку в "тестовые фальшивки" который можно настроить так, чтобы он вел себя так, как указано при выполнении в контексте модульного теста Rubberduck, например, 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
вызовов было бы особенно полезно.