Должны быть написаны юнит-тесты для оценки открытого интерфейса класса. Ваш тестовый пример должен использовать класс так, как вы собираетесь использовать в своей программе. Идея здесь состоит в том, чтобы проверить поведение (ожидаемые, неожиданные или граничные условия) класса.
Обе идеи, которые вы опубликовали, верны. Теоретически у вас должно быть достаточно тестов (маршрутов через ваш код) для запуска всех ваших методов в классе.
Как уже упоминалось, 100% тестирование - хорошая цель, но не всегда реалистичная.
Также, в случае с GD, будьте осторожны при написании модульных тестов, которые проверяют функциональность GD (он уже был протестирован, вам не нужно тратить время на его повторное тестирование). Я бы прочитал с использованием насмешек и заглушек PHPUnit (и насмешек над файловой системой) в руководстве по PHPUnit.
Вот как может выглядеть пример теста:
public function testImageIsResized()
{
$image = new Image();
$image->loadFromPath('some/path');
$image->resize(200, 300);
$this->assertEquals(200, $image->getWidth());
$this->assertEquals(300, $image->getHeight());
}
Теперь, в зависимости от ожидаемого поведения класса изображений, этот тест может пройти без проблем или не пройден, так как ожидал, что новые размеры будут пропорционально ограничены исходными размерами изображения. Но мы не вызывали явно внутренний метод, который проверяет это ограничение в самом тесте.