Mock Object method parameter values are compared twice #105

Closed
chrismcmacken opened this Issue Oct 18, 2012 · 4 comments

Projects

None yet

4 participants

@chrismcmacken

The below test will fail because I modify the $expectedObject before the end of the test. However, if I pass in the incorrect value it will fail before I modify it at the end of the test because the value passed in for the parameters is checked both at the end of the test, and when the method is called. The values that are passed in for parameters should only be checked at the time the method is invoked.

<?php

class Foo {
    public $object;


    public function bar(Baz $object) {
        return $object;
    }

    public function runBar() {
        $this->bar($this->object);
    }
}

class Baz {
}

class FooTest extends PHPUnit_Framework_TestCase {
    public function testRunBar() {
        $mockMethods = array(
            'bar'
        );
        $foo = $this->getMock('Foo', $mockMethods);
        $foo->object = new Baz();

        $expectedObject = clone $foo->object;
        $foo->expects($this->once())
            ->method('bar')
            ->with($expectedObject);

        $foo->runBar();
        $expectedObject->changed = true;
    }
}
@edorian
Collaborator
edorian commented Oct 18, 2012

See the discussion in #100

@fidian
fidian commented Oct 18, 2012

Is there a way to skip the second check at the end of the method testRunBar()? At that point, the mock was called just once with the expected object, so that assertation should be A-OK, right?

@chrismcmacken

One thing that I forgot to mention is that I have applied the patch mentioned here sebastianbergmann/phpunit@b82e74c from issue #100 so the difference is not the __phpunit_id field.

@sebastianbergmann
Owner

Dear contributor,

let me start by apologizing for not commenting and/or working on the issue you have reported or merging the pull request you have sent sooner.

PHPUnit 5.0 was released today. And today I am closing all open bug reports and pull requests for PHPUnit and its dependencies that I maintain. Please do not interpret the closing of this ticket as an insult or a lack of interest in your problem. I am sorry for any inconvenience this may cause.

If the topic of this ticket is still relevant then please open a new ticket or send a new pull request. If your ticket or pull request is about a defect then please check whether the issue still exists in PHPUnit 4.8 (which will received bug fixes until August 2016). If your ticket or pull request is about a new feature then please port your patch PHPUnit 5.0 before sending a new pull request.

I hope that today's extreme backlog grooming will allow me to respond to bug reports and pull requests in a more timely manner in the future.

Thank you for your understanding,
Sebastian

@sebastianbergmann sebastianbergmann locked and limited conversation to collaborators Oct 2, 2015
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.