+2  A: 

When writing test cases you are basically testing a before and after scenario. Before the test is run you want to initialize a clean environment (every time) to ensure you know what to expect. Next you'll run your methods and test what the environment is like afterward, confirming whether or not the action you took had the desired affect.

For example to test your modifyJob method you want to create an environment with a job, call the modifyJob method with test values, and then call getJob on the same job and ensure that the return value has values matching what you passed in to modifyJob:

function testModifyJob() {
  // create clean, known environment
  $controller = new JobsController();
  $job_id = $controller->addJob('name', 'description');

  // run the action
  $controller->modifyJob($job_id, 'new name', 'new description');

  //test the results
  $job = $controller->getJob($job_id);
  $result = $job['name'] == 'new name' && $job['description'] == 'new description';

  return $result;
}

For testing your controller you're going to want to write test cases like the one above for each of the methods the class provides to ensure that the object can be trusted within your system.

When writing your test cases you'll most likely have a need to create new methods on your controller just for your tests, go ahead and create these (if your assignment permits). It's very common for test cases to bring this up and usually helps round out the available functionality of your classes by bringing these nuances to light (one of the reasons test-driven development has such a strong following). An example of this would be creating a hasJob($job_id) method that would test if your jobs collection contains a specific job, allowing you to test functions such as deleteJob().

Cryo