簡體   English   中英

如何測試僅使用PHPUnit調用了模擬的特定方法

[英]How to test that only specific methods of a mock were called with PHPUnit

我有一個要模擬的類,並確保僅調用了其中一個方法。 如何在PHPUnit中構造這樣的模擬對象? 就像是

public function testSystemUnderTestOnlyInvokesFoo() {
    $myMock = $this->createMock(ClassWithManyMethods::class);
    $myMock->expects($this->once())->method('foo');

    // Something like this
    // $myMock->expects($this->never)->method($this->anyMethodExcept('foo'))

    function_under_test($myMock);
}

method函數同時接受字符串和Constraint類。 PHPUnit測試可以創建帶有實用函數(如isNullcontainsmatches約束類。 在示例中, anyMethodExcept轉換為如下代碼:

public function testSystemUnderTestOnlyInvokesFoo() {
    $myMock = $this->createMock(ClassWithManyMethods::class);
    $myMock->expects($this->never)
       ->method($this->logicalNot($this->matches('foo')));
    $myMock->expects($this->once())->method('foo');

    function_under_test($myMock);
}

如果您有幾種方法要排除,請使用matchesRegex像這樣:

$myMock->expects($this->never)
   ->method($this->logicalNot($this->matchesRegex('/foo|bar|baz/')));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM