<sect1 id="zend.test.phpunit" xmlns:xi="http://www.w3.org/2001/XInclude">
    <title>Zend_Test_PHPUnit</title>

    <para>
        <code>Zend_Test_PHPUnit</code> מספקת בדיקות למערכת שלכם אשר כוללת בדיקות של כל פעולה ומה היא צריכה לעשות, ומה היא עושה בפועל. הדרך הקלה והטובה ביותר כדי להבין מה זה באמת עושה היא לצפות בדוגמא לשימוש.
    </para>

    <example id="zend.test.phpunit.loginexample">
        <title>דוגמא לשימוש ב TestCase</title>

        <para>
            הקוד הבא מציג דוגמא פשוטה לשימוש ב <code>UserController</code> על מנת לוודאות כמה דברים:
        </para>

        <itemizedlist>
            <listitem><para>
                טופס ההתחברות מוצג רק למשתמשים שהם לא מחוברים.
            </para></listitem>

            <listitem><para>
                כשמשתמש מתחבר, הוא צריך לעבור לעמוד הפרופיל שלו, והפרופיל צריך להציג מידע רלוונטי אודות המשתמש.
            </para></listitem>
        </itemizedlist>

        <para>
            דוגמא ספציפית זו מעריכה כמה דברים.
            דבר ראשון, אנחנו מעברים את מרבית קוד ההתחלה שלנו לפלאגין.
            זה מפשט את התקנת צורת הבדיקה מאחר וזה מאפשר לנו להגדיר את סביבת העבודה באופן תמציתי, ומאפשר לנו להפעיל את כל המערכת בשורה אחת.
            כמו כן, הדוגמא הספציפית הזו מעריכה שכל המחלקות שצריכות להקרא כבר נקראו ולא יהיה צורך בלדאוג אם הוספנו או קראנו לכל מחלקה שצריך.
        </para>

        <programlisting role="php"><![CDATA[
class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
    public function setUp()
    {
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp();
    }

    public function appBootstrap()
    {
        $this->frontController
             ->registerPlugin(new Bugapp_Plugin_Initialize('development'));
    }

    public function testCallWithoutActionShouldPullFromIndexAction()
    {
        $this->dispatch('/user');
        $this->assertController('user');
        $this->assertAction('index');
    }

    public function testIndexActionShouldContainLoginForm()
    {
        $this->dispatch('/user');
        $this->assertAction('index');
        $this->assertQueryCount('form#loginForm', 1);
    }

    public function testValidLoginShouldGoToProfilePage()
    {
        $this->request->setMethod('POST')
              ->setPost(array(
                  'username' => 'foobar',
                  'password' => 'foobar'
              ));
        $this->dispatch('/user/login');
        $this->assertRedirectTo('/user/view');

        $this->resetRequest()
             ->resetResponse();

        $this->request->setMethod('GET')
             ->setPost(array());
        $this->dispatch('/user/view');
        $this->assertRoute('default');
        $this->assertModule('default');
        $this->assertController('user');
        $this->assertAction('view');
        $this->assertNotRedirect();
        $this->assertQuery('dl');
        $this->assertQueryContentContains('h2', 'User: foobar');
    }
}
]]>
        </programlisting>

        <para>
            ניתן היה לכתוב את אותה הדוגמא בצורה פשוטה יותר -- לא כל הבדיקות אשר מוצגות הם הכרחיות, והם מוצגות רק לצורך המחשה בלבד. בתקווה שזה מציג עד כמה פשוט אפשר יהיה לבדוק את המערכות שהנכם כותבים.
        </para>
    </example>

    <xi:include href="Zend_Test-PHPUnit-Bootstrapping.xml" />
    <xi:include href="Zend_Test-PHPUnit-Testing.xml" />
    <xi:include href="Zend_Test-PHPUnit-Assertions.xml" />
    <xi:include href="Zend_Test-PHPUnit-Examples.xml" />
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
