02.11.2018

TDD: тестирование приватных методов

В рамках обсуждения TDD (test driven development) периодически возникает вопрос: как тестировать приватные методы. Если не отвлекаться на вопрос о том, нужно ли тестировать их вообще, т.к. тестировать следует только публичные методы (это вопрос религиозных предпочтений), то вот несколько способов для написания unit-тестов приватных методов в .net:
  1. Делать метод не private, а public, оставляя комментарий о том, чтобы вернуть инкапсуляцию при создании release сборки. Это самый спорный метод, но тоже может встречаться. Как вариант, можно использовать директиву DEBUG:
    #if DEBUG
            public FileManager(IDataAccessObject dataAccessObject)
            {
                this.dataAccessObject = dataAccessObject;
            }     
    #else
            public FileManager()
            {
                this.dataAccessObject = new FileDataObject();
            }
    #endif
  2. Делать тестируемый метод не private, а protected и создавать наследуемый класс, в котором уже будет тестироваться данный метод.
  3. Вместо private делать методы internal, при этом при объявлении класса добавлять атрибут:
    [assembly: InternalsVisibleTo("You_lib")]
    
  4. При использовании MSTest можно задействовать класс PrivateObject, который позволяет вызывать private методы по имени.
  5. Использовать рефлексию.

Комментариев нет:

Отправить комментарий