BDD tests in PHPUnit
Your switch statements will run through until they find a break statement.  Having the braces {} only defines a block of code and has no effect on breaking out of the case.

switch (1)
{
case 1: {
   echo 'One';
}
case 2: {
   echo 'Two';
}
default: {
   echo 'Also default';
      }
}


The one above prints out "OneTwoAlso default" whereas the following prints out "One".

switch (1)
{
case 1:
   echo 'One';
   break;
case 2:
   echo 'Two';
   break;
default:
   echo 'Also default';
}


I think your testing would be cleaner if you didn't use then and when methods.  Normally I create an array of test data and expected results and loop over them.  As you are writing the test for the isId method I would have something like this:

public function test_isID()
{
   $object = new Object_That_You_Are_Testing();

   $tests = array(
      array('Data'            =&gt; 123,
            'Expected_Result' =&gt; true,
            'Test_Name'       =&gt; 'Positive Integer'),
      array('Data'            =&gt; -123,
            'Expected_Result' =&gt; false,
            'Test_Name'       =&gt; 'Negative Integer'));

   foreach ($tests as $test)
   {
      $this-&gt;assertEquals($test['Expected_Result'],
                          $object-&gt;isID($test['Data']),
                          $test['Test_Name'] . ' Failed');
   }
}


You could do more clever things than this.  Also a test will not always be so simple.  Normally I find that I have mocked objects and am ensuring that they get called appropriately.