Dev*_*v01 1 php phpunit unit-testing
我是使用PHPUnit的新手,我发现使用assertEquals函数轻松测试是否需要给定值,但是我不确定如何使用多个条件测试值,例如:
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
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以在这些条件下帮助编写单元测试吗?谢谢您的帮助
您应为应用程序中每种方法/功能的每种可能路径创建一个测试用例。在您的示例中,对于第一个条件,有两种可能的情况,当$ 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));
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您应该对其余的条件和排列执行相同的操作。但是,您通过意识到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
}
}
Run Code Online (Sandbox Code Playgroud)
测试将通过这种重构为您提供很多帮助。希望这对您有所帮助。
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |