0

プライベート インスタンス変数が設定されていることをテストするのに問題があるようです。私の考えは、クラスをスタブ化し、インスタンス変数をパブリックにして、setter メソッドをテストできるようにすることでした。これは簡単に思えますが、正しく動作させることができないようです。または、プライベート変数の設定をテストするためのより良い方法があるかもしれません。

クラス

<?php
namespace PureChat\src\messages;

/**
 * Message class for containing information about a message.
 */
class Message
{
    /**
     * Contains the message text.
     * @var string
     */
    private $messageText;

    /**
     * Sets the instance variable $messageText.
     * @param string $text The text to assign.
     */
    public function setText($text)
    {
        $this->messageText = $text;
    }
}

PHP単体テスト

<?php
use PureChat\src\messages\Message;

class MessageTest extends \PHPUnit_Framework_TestCase
{
    public function testMessageCanSetText()
    {
        $message = new MessageStub;
        $message->setText('test-text');
        $this->assertEquals(
            $message->messageText, 'test-text');
    }
}

class MessageStub extends Message
{
    public $messageText;
}

実行すると、テストは次のように失敗します。"Failed asserting that 'test-text' matches expected null."最初に考えたのは、スタブ クラスがsetTextメソッドを継承していない可能性がmethod_existsあるということでした。

4

2 に答える 2

0

リフレクションを使用できます。

$message = new Message;
$message->setText('test-text');

$property = (new \ReflectionObject($message))->getProperty('messageText');
$property->setAccessible(true);
$value = $property->getValue($message);
$property->setAccessible(false); // restore state

echo $value;
于 2013-11-01T01:14:27.730 に答える