# Testing your Controllers and MVC Applications

Once you have your bootstrap in place, you can begin testing. Testing is basically as you would expect in an PHPUnit test suite, with a few minor differences.

First, you will need to dispatch a URL to test, using the `dispatch()` method of the TestCase:

    class IndexControllerTest extends Zend_Test_PHPUnit_Controller_TestCase
    {
        // ...

        public function testHomePage()
        {
            $this->dispatch('/');
            // ...
        }
    }

There will be times, however, that you need to provide extra information -- GET and POST variables, COOKIE information, etc. You can populate the request with that information:

    class FooControllerTest extends Zend_Test_PHPUnit_Controller_TestCase
    {
        // ...

        public function testBarActionShouldReceiveAllParameters()
        {
            // Set GET variables:
            $this->request->setQuery(array(
                'foo' => 'bar',
                'bar' => 'baz',
            ));

            // Set POST variables:
            $this->request->setPost(array(
                'baz'  => 'bat',
                'lame' => 'bogus',
            ));

            // Set a cookie value:
            $this->request->setCookie('user', 'matthew');
            // or many:
            $this->request->setCookies(array(
                'timestamp' => time(),
                'host'      => 'foobar',
            ));

            // Set headers, even:
            $this->request->setHeader('X-Requested-With', 'XmlHttpRequest');

            // Set the request method:
            $this->request->setMethod('POST');

            // Dispatch:
            $this->dispatch('/foo/bar');

            // ...
        }
    }

Now that the request is made, it's time to start making assertions against it.