2012-07-30 67 views
3

我想寫一個使用PHPUnit的測試,其中包括一個檢查以確保值是stringNULLPHPUnit中的單元測試 - 處理多個條件

據我所知,我可以寫這樣的測試,像這樣:

if (is_string($value) || is_null($value)) { 
    $result = TRUE; 
} else { 
    $result = FALSE; 
} 

$this->assertTrue($result); 

不過,我已經看到了PHPUnit具有一套logicalOr()方法,我不知道我是否應該使用做出更'原生'測試?如果我應該使用它,我不知道如何去做...

+0

不能你寫的'$結果= IS_STRING($值) || is_null($值)'? – 2012-07-30 11:55:35

+0

@lazyberezovsky是的,它可以寫得更有效率。這並不是真正的問題 - 這是我應該在PHP中進行那樣的測試,還是應該使用PHPUnits的'logicalOr()'方法。 – 2012-07-30 11:57:47

+0

我想推薦你模擬這兩種情況,併爲他們做出單獨的斷言。 如果您遇到這種情況,請考慮單元測試可能無效。 – 2012-07-30 12:04:54

回答

0

logicalOr返回一個對象,用於構建一個條件,可以傳遞給assertThat。我無法檢查的語法我的手機上,但它應該是這個樣子:

self::assertThat(self::logicalOr(self::stringValue(), self::nullValue())); 

的方法名無疑是不正確的,我用Hamcrest,但我自己的結構類似。

0

最好的方法是在出現問題時給你最可用的輸出。在這種情況下,只要你知道哪裏出了問題,我認爲它不太重要。下面的代碼將提供一個有意義的錯誤消息:

$message = '$value should have been either a string or null, but was actually a ' 
      .gettype($value); 
$this->asertTrue($valueIsEitherStringOrNull, $message); 
1

使用PHPUnit的V5.5它(也)以這種方式工作:

if (is_string($value) || is_null($value)) { 
    $result = TRUE; 
} else { 
    $result = FALSE; 
} 

$this->assertThat($value, $this->logicalOr(
    $this->isType('string'), 
    $this->isNull() 
));