2013-06-22 14 views
1

Я новичок в использовании PHPUnit, я узнал, что это легко проверить, если заданное значение желательно с использованием функции assertEquals, но я не уверен, как тестировать значения с более чем одним условием такие как:PHPUnit, как проверить два условия

function myFunction($foo, $bar, $baz)  
{ 
    if (($foo != 3) AND ($foo != 5)) { 
     // something 
    } 

    if (($bar < 1) OR ($bar > 10)) { 
     // something 
    } 

    if ((strlen($baz) === 0) OR (strlen($baz) > 10)) { 
     // something 
    } 
} 

Может ли кто-нибудь помочь в написании модульного теста для этих условий? Спасибо за вашу помощь заранее

ответ

3

Вы должны создать один тест на каждый возможный путь каждого метода/функции в приложении. В вашем примере есть два возможных случая для первого условного, когда $ Foo отличается от 3 и отличается от 5 и при $ Foo равно 3 или 5. Итак, сначала вы должны создать два случая испытаний:

<?php 
class YourClassTest extends PHPUnit_Framework_Testcase 
{ 
    public function test_when_foo_is_different_to_three_or_five() 
    { 
     $this->assertEquals('expected result when foo is different from 3 or 5', myfunction(1)); 
    } 

    public function test_when_foo_is_equal_to_three_or_five() 
    { 
     $expected = 'expected result when foo=3 or foo=5'; 
     $this->assertEquals($expected, myfunction(3)); 
     $this->assertEquals($expected, myfunction(5)); 
    } 
} 

Теперь вы должны сделать то же самое для остальных условностей и перестановок. Однако вы сделали хорошее открытие, осознав, что метод myfunction() делает слишком много вещей, и его трудно проверить и понять, поэтому вы должны переместить все свои условные выражения на разные методы и протестировать их индивидуально, а затем использовать myfunciton(), чтобы вызвать их в желаемый заказ, если вам абсолютно необходимо. Рассмотрим следующий подход:

function myFunction($foo, $bar, $baz)  
{ 
    doSomethingWithFoo($foo);  
    doSomethingWithBar($bar); 
    doSomethingWithBaz($baz); 
} 

function doSomethingWithFoo($foo) 
{ 
    if (($foo != 3) AND ($foo != 5)) { 
     // something 
    } 
} 

function doSomethingWithBar($bar) 
{ 
    if (($bar < 1) OR ($bar > 10)) { 
     // something 
    } 
} 

function doSomethingWithBaz($baz) 
{ 
    if ((strlen($baz) === 0) OR (strlen($baz) > 10)) { 
     // something 
    } 
} 

Тестирование поможет вам с таким рефакторингом. Надеюсь, это поможет вам прояснить немного больше.

Смежные вопросы