2016-10-11 28 views
1

想象一下,我們有一個包含不同類型服務器的遊戲來代表不同的國家。現在,讓我們說遊戲只允許用戶「與朋友」只與其帳戶所在服務器相同的其他玩家。作爲一名開發人員,我負責編寫一個測試用例,僅用於查看用戶是否可以互相「夥伴」互動。然而,這裏是我的困境所在,因爲我只需測試用戶是否可以「夥伴」別人,是否還必須測試用戶是否不能在同一個測試用例中添加來自其他服務器的用戶,或者應該寫在另一個測試用例中,與我正在寫的當前測試用例完全分開嗎?單元測試應該包含與您正在測試的內容相反的內容嗎?

回答

1

是的,你應該。

您所描述的第一次測試,在那裏你只是測試,如果他們能有一哥們,被稱爲Happy Path testing。你正在測試它的工作原理,沒有例外或錯誤或奇怪的用例。

快樂路徑測試是一個良好的開端。其他一切都是真正樂趣開始的地方。

在你的情況,腦海中出現的東西...

  • ,如果他們有一個無效的哥們哥們什麼?
  • 如果他們與已經是他們的朋友的人夥伴呢?
  • 如果他們與不是用戶的東西夥伴怎麼辦?

如何將這些應組織是口味的問題。理想情況下,他們都是單獨的測試。這使得每個測試的目的都是通過測試名稱清晰的,並且避免了測試之間的交互和依賴關係。這裏有一個沒有特定語言的草圖。

describe add_buddy { 
    test happy_path { 
     assert user.add_buddy(valid_buddy); 
     assert user.buddies.contains(valid_buddy); 
    } 

    test buddy_on_another_server { 
     buddies = user.buddies; 
     assert !buddies.contains(invalid_buddy); 

     assertThrows { 
      user.add_buddy(invalid_buddy); 
     } InvalidBuddy; 

     assert buddies == user.buddies, "buddy list unchanged"; 
    } 

    test buddy_with_non_user { 
     buddies = user.buddies; 

     assertThrows { 
      user.add_buddy(non_user); 
     } ArgumentError; 

     assert buddies == user.buddies, "buddy list unchanged"; 
    } 

    test buddy_an_existing_buddy { 
     assert user.add_buddy(valid_buddy); 

     # Should this return true? False? An exception? 
     # You have to decide. I decided false. 
     assert !user.add_buddy(valid_buddy); 

     # The buddy is only on the list once. 
     assert user.buddies.numContains(valid_buddy) == 1; 
    } 
} 

之類的東西uservalid_buddy可以在setup程序來創建,或者更好的他們可以通過固定裝置發生器如Factory_Girl

+1

謝謝你這麼多,這確實清除了很多我的問題,現在我什麼我應該做的^ _ ^少不確定性。 – Belphegor