PHPUnit 测试结果类型或结果变量
PHPUnit Test result type or also the result variables
在单元测试期间,我总是对要测试的内容感到困惑。
我需要测试 API 并且只测试 API 还是方法结果值。
class SomeEventHandler
{
public function onDispatch (Event $event)
{
if ($event->hasFoo)
{
$model = $this->createResponseModel('foo');
}
else
{
$model = $this->createResponseModel('bar');
}
// End.
return $model;
}
private function createResponseModel ($foo)
{
$vars = array(
'someVare' => true,
'foo' => $foo
);
// End.
return new ResponseModel($vars);
}
}
所以我应该测试方法 onDispatch
returns 是否是 ResponseModel
的实例还是我应该测试变量 foo 是否设置正确?
或者下面的测试是否正常?
class SomeEventHandlerTest
{
// assume that a instance of SomeEventHandler is created
private $someEventHandler;
public function testOnDispatch_EventHasFoo_ReturnsResponseModel ()
{
$e = new Event();
$e->hasFoo = true;
$result = $someEventHandler->onDispatch($e);
$this->assertInstanceOf('ResponseModel', $result);
}
public function testOnDispatch_EventHasNoFoo_ReturnsResponseModel ()
{
$e = new Event();
$e->hasFoo = false;
$result = $someEventHandler->onDispatch($e);
$this->assertInstanceOf('ResponseModel', $result);
}
}
如果您手动检查代码,您会检查什么?只是返回了 ResponseModel 或者它也有正确的值?
如果您不编写测试并执行代码,您会寻找什么来确保代码按预期执行。您将检查返回对象中的值是否正确。我会通过使用对象的 public API 来验证值是否正确。
一个想法是进行测试,这样如果代码被删除,您将能够通过仅进行测试来重新创建所有功能。仅检查返回的对象可能会导致函数只有 return new ResponseModel();
。这将通过测试,但不是您想要的。
简而言之,您决定测试的内容是主观的,但是您至少应该测试所有 public 方法。
许多人将他们的测试限制在 public 方法上,并简单地确保 protected/private 方法的代码覆盖率足够。但是,请随意测试您认为值得测试的任何内容。一般来说,测试越多越好。
在我看来,您当然应该测试您的响应数据,而不仅仅是 return 类型。
我依靠单元测试让我在未来进行代码更改,并且我对我的更改没有造成任何中断感到满意,只是 运行 测试。
所以在你的情况下,如果 "foo" 或 "bar" 响应数据很重要,你应该测试它。
这样,如果您以后不小心更改了响应字符串,您的测试会告诉您。
在单元测试期间,我总是对要测试的内容感到困惑。 我需要测试 API 并且只测试 API 还是方法结果值。
class SomeEventHandler
{
public function onDispatch (Event $event)
{
if ($event->hasFoo)
{
$model = $this->createResponseModel('foo');
}
else
{
$model = $this->createResponseModel('bar');
}
// End.
return $model;
}
private function createResponseModel ($foo)
{
$vars = array(
'someVare' => true,
'foo' => $foo
);
// End.
return new ResponseModel($vars);
}
}
所以我应该测试方法 onDispatch
returns 是否是 ResponseModel
的实例还是我应该测试变量 foo 是否设置正确?
或者下面的测试是否正常?
class SomeEventHandlerTest
{
// assume that a instance of SomeEventHandler is created
private $someEventHandler;
public function testOnDispatch_EventHasFoo_ReturnsResponseModel ()
{
$e = new Event();
$e->hasFoo = true;
$result = $someEventHandler->onDispatch($e);
$this->assertInstanceOf('ResponseModel', $result);
}
public function testOnDispatch_EventHasNoFoo_ReturnsResponseModel ()
{
$e = new Event();
$e->hasFoo = false;
$result = $someEventHandler->onDispatch($e);
$this->assertInstanceOf('ResponseModel', $result);
}
}
如果您手动检查代码,您会检查什么?只是返回了 ResponseModel 或者它也有正确的值?
如果您不编写测试并执行代码,您会寻找什么来确保代码按预期执行。您将检查返回对象中的值是否正确。我会通过使用对象的 public API 来验证值是否正确。
一个想法是进行测试,这样如果代码被删除,您将能够通过仅进行测试来重新创建所有功能。仅检查返回的对象可能会导致函数只有 return new ResponseModel();
。这将通过测试,但不是您想要的。
简而言之,您决定测试的内容是主观的,但是您至少应该测试所有 public 方法。
许多人将他们的测试限制在 public 方法上,并简单地确保 protected/private 方法的代码覆盖率足够。但是,请随意测试您认为值得测试的任何内容。一般来说,测试越多越好。
在我看来,您当然应该测试您的响应数据,而不仅仅是 return 类型。
我依靠单元测试让我在未来进行代码更改,并且我对我的更改没有造成任何中断感到满意,只是 运行 测试。
所以在你的情况下,如果 "foo" 或 "bar" 响应数据很重要,你应该测试它。
这样,如果您以后不小心更改了响应字符串,您的测试会告诉您。