如何在PHPUnit中验证此函数是否为字符串?

时间:2012-09-12 17:28:46

标签: php phpunit

这是我原始PHP代码的代码:

public function outputText() {   
    $i = 1;   
    foreach($this->sorted_data as $this->data) {   
        echo "$i. ".$this->data[0]."<br/>";   
        $i++;  
    }  
}

这是PHPUnit的代码:

public function testVerify() {
    $yn = new SortThisData();
    $yn->readFile("input.txt");
    $output = $yn->outputText();
    $this->assertTrue(is_string($output));

    //if(!is_string($yn->get()))
    //    return false;
    //$this->assertNotEmpty($yn->get());
    }

该类在原始PHP文件中称为SortThisData。 当我使用gettype()时,它说它是null。我正在尝试验证它是一个字符串,以便它可以传入PHPUnit。有没有办法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

您正在寻找assertInternalType()

更新:我没有意识到你正在回应输出。您可能需要使用output buffering来捕获文本。

public function testVerify() {
    $yn = new SortThisData();
    $yn->readFile("input.txt");

    // start output buffering and capture the output
    ob_start();
    $yn->outputText();
    $output = ob_get_clean();

    $this->assertInternalType('string', $output);
}

答案 1 :(得分:1)

对贝勒的回答没有异议。要回答这个问题,就像被问到的那样,你所拥有的东西也足够好了:

$this->assertTrue(is_string($output));

或者你可以做到:

$this->assertEquals('string',gettype($output));

(后者的优点是,当它失败时,它也会告诉你$output的类型; assertTrue只会告诉你某些事情失败了。)

assertInternalType()正是如此,但仅在PHPUnit 3.5中引入,您仍会在某些机器上使用PHPUnit 3.4。