Модульное тестирование метода синглтон-паттерна __clone () в php - PullRequest
0 голосов
/ 02 марта 2011

В настоящее время я работаю над модульным тестированием созданного мной пользовательского класса, основанного на шаблоне проектирования singleton. На основании отчета о покрытии кода у меня покрыто 95,45%. Я использую PHPUnit для проведения модульного тестирования, и я прошел через эту статью Себастьян Бергманн.

Единственная проблема, с которой я остаюсь - это тестирование против клонирования классов с помощью магического метода __clone(). Я установил этот метод как приватный, чтобы избежать создания экземпляров

private final function __clone()
{}

Какой лучший способ написать тест, чтобы убедиться, что синглтон не «клонируемый». (Тот же тест в конечном итоге может быть использован для проверки __constructor())

На самом деле не вопрос, но только я или тесты на окнах работают очень медленно по сравнению с * nix?

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Имейте в виду, что покрытие кода не является мерой того, насколько корректна ваша программа, и 100% покрытие не означает, что вы выполнили каждый путь кода. Например, троичный оператор

a ? b : c

и составные логические выражения

if (a < 1 || b > 6)

считается как отдельные операторы, даже если вы можете выполнить только их часть из-за короткого замыкания. Кроме того, опуская скобки вокруг блоков с одним оператором if, while и т. Д., Все превращается в один оператор.

Следующее будет отображаться как отдельный оператор в отчете о покрытии кода, поэтому вы не сможете определить, выполнили ли вы оба случая (true и false).

if (...)
    foo();

Я чувствую, что

private final function __clone() { }

слишком просто, чтобы потерпеть неудачу. Проверка того, что метод генерирует исключение (с использованием отражения не меньше, чем ваши клиенты не сделают), - это проверка интерпретатора PHP вне моей области.

[Для справки, я тоже получаю небольшой OC, когда дело доходит до достижения 100% покрытия кода, но помнить вышеупомянутые факты помогает облегчить его, чтобы я мог перейти к написанию лучшего кода.]

1 голос
/ 02 марта 2011

Вызовите клона или конструктора и проверьте, было ли выброшено исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...