А быстрый ответ, только для добавления немного большего знания к этой теме:
необходимо определенно проверить NetBeans. Netbeans 6.7 имеет следующие функции:
я думаю, что это - идеальное (и намного лучше) замена Visual Studio и очень хороший инструмент для изучения C/C++.
Удачи!
В имеющейся у меня версии 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 ничего не делает. В частности, это не
Похоже, вам просто нужно сообщить PHPUnit, что вы хотите имитировать эту функцию, например:
$mock = $this->getMock('SomeClass',
array('_protectedMethod'));
$mock->expects($this->once())
->method('_protectedMethod');
$mock->doStuff();