2013-09-16 32 views
2

您如何看待下面的斷言?斷言中的邏輯運算符是否可接受?

Assert.IsTrue(condition1 && condition2); 

我在審查會議期間想出了這種類型的斷言。據我所見,使用& &算子在斷言中不是一個好習慣。我想知道別人怎麼看?值得一提的是,在下一次審查會議中這是一個問題?或者這只是個人喜好?

+1

爲什麼你覺得這是不是一個好主意?你建議做什麼呢? – Servy

+1

我覺得沒有錯...... –

+1

當測試失敗時錯誤信息是否清除? – doctorlove

回答

8

當你寫

Assert.IsTrue(condition1 && condition2); 

然後,它目前還不清楚是什麼原因導致測試失敗的 - 第一個或第二個條件。因此,你需要他們兩人是true只檢查一個接一個:

Assert.IsTrue(condition1); 
Assert.IsTrue(condition2); 

現在,讓我們覺得這有什麼錯OR條件:

Assert.IsTrue(condition1 || condition2); 

這看起來像隨機測試 - 它會傳遞不同的方案:

  1. 第一條件是真,第二是假
  2. 如果都是真
  3. 如果第二個是真實的,但首先是假

所以,你正在檢查什麼情況到底如何?創建三種不同的情景來重現這三種情況。每個測試將包含兩個斷言,例如對於最後一個場景:

Assert.IsFalse(condition1); 
Assert.IsTrue(condition2); 
+1

和錯誤信息,這正是我在審查會議上提到的。 – pappati

+0

@pappati是的,與你同意。消息也很有用。順便說一句,我用OR條件更新了答案 –

+1

我認爲你對'||'的確是正確的,我想不出任何我在答案中寫的東西。 –

2

這取決於上下文。

Assert.IsTrue(condition1 && condition2); 

當然也由2個獨立Assert s內更換但如何

Assert.IsTrue(condition1 || condition2); 

當發生這種情況是有效的測試結果,然後我看到它沒有問題。

因此,當兩個條件邏輯相關時,請使用&&
當他們有2個或多或少的獨立結果時,使用2個Assert調用。

2

如果條件不相關的話,我會做兩個斷言。但是,你的技術是

Debug.Assert(str != null && str.Length == 10); 

因爲當時不拋出非常有用,因爲

Debug.Assert(str != null); 
Debug.Assert(str.Length == 10); 

會的情況下斷言被違反。

0

在我看來,一個單元測試應該測試1,只有1件事。使用& &似乎與此相反。

如果有多個「概念」或關注的領域,那麼這是不理想的,並建議重構,以不同的測試,每一個概念。

另外,如果它只是一點鍛鍊邏輯,那麼很好。但是 - 提取這個邏輯來明確這是怎麼回事,而不是把它放在斷言中。

將測試分爲多個測試有意義嗎?

  • 拆分測試可能獨立失敗嗎?
  • 如果失敗的話,是否有另一個測試給調查失敗的人提供有用的信息?
  • 拆分測試測試是否有失敗的可能性或是否微不足道?
  • 可能/容易重構以進行多重測試嗎?