TDD friendly objects

I’ve refactored the tad_TestableObject class I had presented in a previous post after some mileage to a simpler and more useful interface.

The problem

As I had stated in the above-mentioned post while I’d like to keep developing test-driven developed (TDD) code when possible I’d also like to make setting up per-method testing environments less of a chore.
Testing the methodOne of this class

class ClassOne{

    protected $d;

    public function __construct(D $d){
        $this->d = $d;
    }

    public function methodOne(A $a, BInterface $b, CInterface $c){
        $a->method();
        $b->method();
        $c->method();
        $this->d->method();
    }
}

would require mocking instances of the A and D classes and the BInterface and CInterface interfaces like

// file ClassOneTest.php

public function test_methodOne_will_call_methods(){
    $mockA = $this->getMock('A', array('method'));
    $mockBInterface = $this->getMock('BInterface', array('method'));
    $mockCInterface = $this->getMock('CInterface', array('method'));
    $mockD = $this->getMock('D', array('method'));

    $mockA->expects($this->once())->method('method');
    $mockBInterface->expects($this->once())->method('method');
    $mockCInterface->expects($this->once())->method('method');
    $mockD->expects($this->once())->method('method');

    $sut = new ClassOne($mockD);

    $sut->methodOne();
}

I’d like some faster mocking.

Another solution

I’ve modified my original tad_TestableObject class to define a static method that allows getting mocked dependencies for one or more of its methods like

class ClassOne extends tad_TestableObject {

    protected $d;

    /**
     * @depends D
     */
    public function __construct(D $d){
        $this->d = $d;
    }

    /**
     * @depends A, BInterface, CInterface
     */
    public function methodOne(A $a, BInterface $b, CInterface $c){
        $a->method();
        $b->method();
        $c->method();
        $this->d->method();
    }
}

and would allow me to rewrite the test method above in a shorter form

// file ClassOneTest.php

public function test_methodOne_will_call_methods(){

    $mockedDependencies = ClassOne::getMocksFor($this, array('__construct', 'methodOne'))     

    $mockDependencies->A->expects($this->once())->method('method');
    $mockDependencies->BInterface->expects($this->once())->method('method');
    $mockDependencies->CInterface->expects($this->once())->method('method');
    $mockDependencies->D->expects($this->once())->method('method');

    $sut = new ClassOne($mockD);

    $sut->methodOne();
}

I feel like it’s not cryptic to read and quite convenient.
The tad_TestableObject class is part of the tdd-helpers package.

I appreciate your input