セッターとゲッターの単体テストは時間の無駄であり、何らかのロジックが含まれている場合にのみアクセサーをテストする必要があると多くの人が考えているようです。同意します。
しかし、いくつかの (少量の) ロジックを必要とするプロパティはどうでしょうか?
class DeliveryReportEvent extends Event
{
private static $reasonMap = array(
'401' => "Message expired (device off/not reachable)",
'201' => "Operator network malfunctioning",
'203' => "Recipient unreachable (in roaming)",
'301' => "Invalid recipient (nonexistent/on portability/not enabled)",
'302' => "Wrong number",
'303' => "SMS service not enabled",
);
private $errorCode;
public function __construct($errorCode)
{
$this->errorCode = $errorCode;
if(array_key_exists($errorCode, self::$reasonMap)) {
$this->errorReason = self::$reasonMap;
}
}
public function getErrorCode()
{
return $this->errorCode;
}
public function getErrorReason()
{
return $this->errorReason;
}
}
テストgetErrorCode()
はばかげているように聞こえるかもしれませんが (ロジックと IDE 機能がないため)、テストgetErrorReason()
は理にかなっていると思いますか?
/**
* @dataProvider getKnownErrorCodesAndReasons
*/
public function testErrorReasonWithKnownErrorCodes($knownErrorCode,
$expectedErrorReason)
{
$event = $this->getMockDeliveryReportEvent($knownErrorCode);
$actualErrorReason = $event->getErrorReason();
$this->assertNotNull($errorReason);
$this->assertContains($expectedErrorReason, $actualErrorReason, '', true);
}
public function getKnownErrorCodesAndReasons()
{
return array(
array('401', "expired"),
array('201', "network malfunctioning"),
array('203', "unreachable"),
array('301', "invalid recipient"),
array('302', "wrong number"),
array('303', "not enabled"),
);
}