Тестирование, если защищенный метод назвали

А быстрый ответ, только для добавления немного большего знания к этой теме:
необходимо определенно проверить NetBeans. Netbeans 6.7 имеет следующие функции:

  • Проекты C/C++ и Шаблоны: подсветка синтаксиса Поддержек, автоматическое завершение кода, автоматическое добавление отступа.
  • Это имеет Отладчик C/C++
  • Конфигурации Компилятора Поддержек, Менеджер конфигурации и Поддержка Make-файла (с Мастером).
  • Это имеет Окно Классов, Окно Использований и Окно навигации Файла (или панель).
  • А представление Макрорасширения , и также подсказки .
  • Поддержка разработка кварты .

я думаю, что это - идеальное (и намного лучше) замена Visual Studio и очень хороший инструмент для изучения C/C++.

Удачи!

5
задан Luiz Damim 17 July 2012 в 17:38
поделиться

2 ответа

В имеющейся у меня версии PHPUnit класс PHPUnit_Framework_MockObject_Mock использует методы PHP get_class_methods для определения интерфейса имитируемого объекта. get_class_methods выберет только общедоступные методы, а не защищенные или частные.

Это соответствует духу модульного тестирования xUnit. Рассмотрим пример документации PHPUnit о том, как использовать Mock Objects . Там SUT - это Subject , у которого есть защищенный метод notify . Однако тестируемый метод - doSomething . Рассматривая Subject как черный ящик, нас не интересуют детали того, как он реализован. Однако нас волнует его поведение . В частности, мы требуем, чтобы при вызове doSomething вызывался метод update всех подключенных наблюдателей. Поэтому мы имитируем сторонний объект Observer и устанавливаем ожидание, что будет вызван его метод update . Обратите внимание, что хотя защищенный метод notify выполняется, в тесте он явно не назван. Это дает нам свободу изменять реализацию в любое время, пока это поведение сохраняется.

Возвращаясь к вашему примеру.

class MyTest extends PHPUnit_Framework_TestCase
{
  public function testCalled()
  {
    $mock = $this->getMock('SomeClass');
    $mock->expects($this->once())
         ->method('_protectedMethod');

    $mock->doStuff();
  }
}

Здесь ваш метод testCalled не создает экземпляра метода Тестируемая система (SUT), которым будет SomeClass. Версия doStuff в макете SomeClass ничего не делает. В частности, это не

10
ответ дан 18 December 2019 в 14:47
поделиться

Похоже, вам просто нужно сообщить PHPUnit, что вы хотите имитировать эту функцию, например:

$mock = $this->getMock('SomeClass',
                        array('_protectedMethod'));
$mock->expects($this->once())
     ->method('_protectedMethod');

$mock->doStuff();
3
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: