0

セッターとゲッターの単体テストは時間の無駄であり、何らかのロジックが含まれている場合にのみアクセサーをテストする必要があると多くの人が考えているようです。同意します。

しかし、いくつかの (少量の) ロジックを必要とするプロパティはどうでしょうか?

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"),
    );
}
4

1 に答える 1

4

それはすべて主観的であり、次のような多くの要因に依存します。

  • テスト ケースにどのレベルのコード カバレッジを持たせたいですか? 一部のリリース管理システムでは、この適用範囲を定義しており、リリース確認の前に他の基準とともに満たす必要があります。
  • 重要な機能ですかgetErrorReason()(内部ロジックがどれほど小さいにもかかわらず)? つまり、めちゃくちゃになったらシステムが壊れますか?

また、次のような他の要因にも依存します。

  • 自由時間はどれくらいありますか?
  • あなたはどのくらい純粋主義者ですか?
  • 口ひげはありますか?

などなど.. :)

于 2012-09-26T16:32:18.197 に答える