在单元测试期间,我总是对测试内容感到困惑。 我是否需要测试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
是否返回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);
}
}
答案 0 :(得分:1)
如果你手动检查代码,你会检查什么?只是返回了一个ResponseModel,或者它还有正确的值?
如果您没有编写测试并执行代码,那么您需要什么来确保代码正在执行它应该执行的操作。您将检查返回的对象中的值是否正确。我会通过使用对象的公共API来验证值是否正确。
一个想法是进行测试,如果代码被删除,您将能够通过仅进行测试来重新创建所有功能。只检查返回的对象可能会产生一个只有return new ResponseModel();
的函数。这将通过测试但不是你想要的。
答案 1 :(得分:1)
简而言之,您决定测试的是主观的,但您应该至少测试所有公共方法。
许多人将测试限制为公共方法,只需确保受保护/私有方法的代码覆盖率足够。但是,您可以随意测试您认为值得测试的任何内容。一般来说,越多的测试越好。
答案 2 :(得分:1)
在我看来,您当然应该测试您的响应数据,而不仅仅是返回类型。
我依靠单元测试让我在将来进行代码更改,并且只需运行测试就可以确保我的更改没有创建任何中断。
所以在你的情况下,如果" foo"或" bar"响应数据很重要,你应该测试一下。
如果你以后偶然更改了响应字符串,那么你的测试会告诉你。