(mostrerò esempi usando php e phpunit ma questo può essere applicato a qualsiasi linguaggio di programmazione)
Il caso: diciamo che abbiamo un metodo A::foo
che delega un po 'di lavoro alla classe M
e restituisce il valore così com'è.
Quale di queste soluzioni sceglieresti:
$mock = $this->getMock('M');
$mock->expects($this->once())
->method('bar')
->will($this->returnValue('baz'));
$obj = new A($mock);
$this->assertEquals('baz', $obj->foo());
o
$mock = $this->getMock('M');
$mock->expects($this->once())
->method('bar')
->will($this->returnValue($result = 'baz'));
$obj = new A($mock);
$this->assertEquals($result, $obj->foo());
o
$result = 'baz';
$mock = $this->getMock('M');
$mock->expects($this->once())
->method('bar')
->will($this->returnValue($result));
$obj = new A($mock);
$this->assertEquals($result, $obj->foo());
Personalmente seguo sempre la seconda soluzione, ma solo 10 minuti fa ho avuto una conversazione con un paio di sviluppatori che hanno detto che è "troppo difficile" e ha scelto il 3 ° o il 1 °.
Quindi cosa faresti di solito? E hai qualche convenzione da seguire in questi casi?