2015-04-06 19 views
2

Я писал код 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 
+1

Я понимаю вашу потребность проверять частные методы, но [вы не должны этого делать] (https://lostechies.com/chadmyers/2008/11/21/do-not-test-private-methods/). Если вы считаете, что ваш частный метод должен быть вызван, по крайней мере, из одной публики (если нет, зачем вы его пишете). Вместо этого протестируйте публичный метод. Во всяком случае, я не думаю, что [RubberDuck] (http://www.rubberduck-vba.com/) поддерживает тестирование частных методов. – PetLahev

+0

Я могу подтвердить, что Rubberduck не поддерживает тестирование частных методов. Если вы действительно чувствуете, что вам нужно протестировать частный метод, вероятно, вам нужно извлечь другой класс, где этот метод может быть общедоступным. В противном случае просто проверьте метод, который вызывает его поведение. – RubberDuck

+1

Также важно отметить, что VBA не поддерживает Inheritance (дочерние классы). – RubberDuck

ответ

2

проект Rubberduck начал с портированием на C# некоторого VBA кода модульного тестирования, которые вы можете найти right here on Code Review Stack Exchange - это не позволит вам назвать Private методы, но если вы не можете установить любой Надстройки IDE - лучший выбор - probab чтобы написать свое.

Я не собираюсь подробно описывать все здесь, но я рекомендую вам взглянуть на сообщение Code Review, которое я только что связал (и другие связанные с ним сообщения CR), и реализовать свою собственную версию.


Что касается тестирования Private методов ... don't do that. Они представляют собой детали реализации на более низком уровне абстракции, чем те, которые вы действительно тестируете. Проверьте методы Public, которые их называют, - если эти методы работают так, как должны, частные методы выполняют свою работу.