Я писал код OO VBA, это действительно помогает мне писать частые модульные тесты.
Мой подход к написанию этих тестов будет включать в себя запись имен «test_CLASSNAME» там, где я создаю экземпляр объекта, задаю параметры и консуддию с помощью Debug.Assert
.VBA Unit Testing
Проблема в том, что мои классы немного усложняются, и я хотел бы запустить модульные тесты, которые включают частные методы & свойств этого класса. Использование моей оценки, которая, конечно, невозможна, потому что я использую внешний Sub
для вызова соответствующих методов.
Таким образом, мой вопрос заключается в том, что существуют другие подходы к тестированию модулей в VBA, предпочтительно, которым удается получить доступ к закрытым методам класса?
Я наткнулся на follwing post, но решения, связанные с установкой надстроек, моя рабочая политика запрещает это делать. Поэтому я предпочел, что если бы я мог создать подкласс класса test
класса, который я хочу протестировать, я мог бы получить доступ ко всем внутренним материалам (это, например, как Ruby решает это с помощью модуля Test::Unit
).
Для АргументЪ Сака здесь является фиктивной класс, который я хочу проверить
Class Dummy
Private Priv1 as Integer
Private Class_Init()
Priv1 = 1
End Sub
Private Sub sub1()
Priv1 = 2
End Sub
End
И вот как я обычно проверить это (Прилагаются мой метод, и свойство не было частным, таким образом, в данном случае это недействителен):
Sub test_Dummy()
Dim tested as New Dummy
Debug.Assert tested.Priv1 = 1
tested.sub1
Debug.Assert tested.Priv1 = 2
Debug.Print "Dummy passed all tests"
End
Я понимаю вашу потребность проверять частные методы, но [вы не должны этого делать] (https://lostechies.com/chadmyers/2008/11/21/do-not-test-private-methods/). Если вы считаете, что ваш частный метод должен быть вызван, по крайней мере, из одной публики (если нет, зачем вы его пишете). Вместо этого протестируйте публичный метод. Во всяком случае, я не думаю, что [RubberDuck] (http://www.rubberduck-vba.com/) поддерживает тестирование частных методов. – PetLahev
Я могу подтвердить, что Rubberduck не поддерживает тестирование частных методов. Если вы действительно чувствуете, что вам нужно протестировать частный метод, вероятно, вам нужно извлечь другой класс, где этот метод может быть общедоступным. В противном случае просто проверьте метод, который вызывает его поведение. – RubberDuck
Также важно отметить, что VBA не поддерживает Inheritance (дочерние классы). – RubberDuck