Galen
Galen

Reputation: 30180

PHPUnit says im not passing argument to parent class method. I am

I have a test class that extends an abstract parent class. The parent class extends PHPUnit_Framework_TestCase, it defines some methods that all tests will use.

I'm having an issue calling the parents methods. Phpunit is saying that i'm not providing any arguments to the method but i am.

Here is the child's method

public function testEmptyGarbageNullDataDoesntValidate() {
    $rule = new Rule\Between( 1, 10 );
    $this->testNullDataDoesntValidate( $rule );
    // $this->testEmptyDataDoesntValidate( $rule );
    // $this->testGarbageDataDoesntValidate( $rule );
}

Here's the parent method

public function testNullDataDoesntValidate( \Validator\Rule $rule ) {
    $this->validator->addRule( 'null', $rule );
    $this->assertFalse( $this->validator->validate( array( 'null' => null ) ) );
}

I'm getting the error

Argument 1 passed to BaseRuleTest::testNullDataDoesntValidate() must be an instance of Validator\Rule, none given

It's saying None is given, but its being given. I can go into the child's function and var_dump( $rule ) and see the data, it's definitely there.

Here's the var_dump from within the parent method

object(Validator\Rule\Between)#210 (2) {
  ["min_value":protected]=>
  int(1)
  ["max_value":protected]=>
  int(10)
}

I'm assuming it has something to do with the way phpunit works. I'm new to phpunit.

Any ideas?

Upvotes: 0

Views: 469

Answers (2)

cweiske
cweiske

Reputation: 31147

Argument 1 passed to BaseRuleTest::testNullDataDoesntValidate() must be an instance of Validator\Rule, none given

That errors is coming from PHPUnit trying to call that test method, not from your code calling that method.

If you had included the stack trace (install xdebug to always see it), that would have been obvious.

Upvotes: 2

jchapa
jchapa

Reputation: 3996

Try renaming testNullDataDoesntValidate to something that doesn't start with test.

Functions that are actual tests begin with the word "test". See here: http://www.phpunit.de/manual/3.6/en/writing-tests-for-phpunit.html

Because that makes them actual tests, phpunit calls it without arguments.

Upvotes: 3

Related Questions