Unit Testing and logicalOr()

I’m just looking into unit testing with PHPUnit and understand basic assertion tests such as:

$this->assertInternalType('int', $expected_int_value);
$this->assetEquals($one_value, $another_value);

However, I want to be able to make an assertion where a value can equal an internal type of string OR null.

I’ve seen there’s a logicalOr() method available but aren’t sure how to use it.

If someone could point me in the right direction that would be great!

How about:


switch($value){
    is_int($value) == 1:
        $this->assertInternalType('int', $value);
        break;
    is_string($value) == 1: 
        $this->assertInternalType('string', $value);
        break;
   empty($value):
       $this->assertNull($value);
   default:
       throw new exception('Value should be either a string, integer or NULL');
}

You would want to replace the thrown exception with the PHPUnit method that can manually add a failure. Something like this should work.

Is this even possible? I can’t find a method to manually add a failure…

Perhaps something like this would work:


if (is_string($value) || is_null($value)) {
    $result = TRUE;
} else {
    $result = FALSE;
}

$this->assertTrue($result);

My only concern is whether this is an acceptable way of doing things or whether PHPUnit’s built-in logical operators can/should be used some how?

Hi,

I use SimpleTest and it has such an assertion; although the way you have written it is OK as it does test the value and should fail if it is neither of your two filtered types.

I don’t know how full-in you’ve gone regarding unit testing, but here is a decent link on the TDD driven approach, and it also provides benefits to this process. And there is this link on PHPUnit’s site regarding[URL=“http://www.phpunit.de/manual/current/en/behaviour-driven-development.html”] behavioral development a modern approach that addresses the fact that XP (Extreme) programming still forces a developer to not think in terms of specifications.

There’s a $this->fail() method in phpunit:

http://www.phpunit.de/manual/3.0/en/api.html#api.assert.tables.bottleneck-methods

There’s also a logicalOR method:

http://www.phpunit.de/manual/3.0/en/api.html#api.assert.tables.constraints

I am also using phpunit. I’m a little new and have run into a tough problem.

I am testing a function in a class whose constructor I absolutely have to disable because it news up an object that I can’t access from the test. So, I use the code:


public function testConnect(){
	$mock = $this->getMockBuilder('FSCall')
		->setMethods(array('setOpened'))
		->disableAutoload()
		->disableOriginalConstructor()
		->getMock();
	$call = new FSCall;
	$call->connect();
}

…where ‘setOpened’ is a local function that function connect calls, but I don’t need it to actually call the function for the unit test.

The problem is that phpUnit returns the error “Call to undefined method FSCall::connect()”. The function is in the FSCall class. Now I can “fix” the error by doing a…


$mock->expects($this->any())->method('connects')

…but then the connects function doesn’t actually get called.

What am I misunderstanding here?

Any help will be greatly appreciated.

G