簡體   English   中英

.NET中的單元測試和UI測試

[英]Unit testing and UI testing in .NET

我是單元測試的新手。 我想知道單元測試需要達到什么級別。 我主要研究Web應用程序。 我目前正在閱讀一本MVC書,他們展示了一些用於網格分頁和填充菜單控件的單元測試。 是否需要測試業務對象的屬性,方法,數據層,存儲過程等? 我不想看起來偏執並測試所有內容。 如果是最佳做法,那么我會做。

例如,如果一個名字屬性應該是50個字符長,並且可能僅包含字母字符,那么我是否需要同時測試這兩個字符?

我也在使用Yahoo User Interface庫,是否也需要對此進行測試?

有哪些UI單元測試工具可用? 我聽說有一些框架可以讓您模擬一個整體,即使它不存在,然后您可以通過這種方式測試頁面? 有哪些UI測試框架可用?

我想聽到盡可能多的意見嗎? 任何有很多示例的初學者的建議書籍都將不勝感激。

謝謝

不要測試屬性,方法,數據等。相反,請描述您要查找的行為,並提供一些示例來說明如何使用該類。

您會發現代碼庫中的大多數行為都是有價值的,因此您可以通過這種方式獲得較高的覆蓋率,而不會顯得偏執。 (如果它不值錢,請將其刪除!)

例如,您可能有一個驗證器,其內容為:

[Test]
public void ShouldOnlyValidateAlphaNamesLessThan50Chars() {

    var validator = new Validator();

    Assert.IsTrue(validator.validates("An Alpha Name"));

    Assert.IsFalse(validator.validates(
        "A Really Really Long Name that's 51 characters xx"));
    Assert.IsFalse(validator.validates("A name with 1234 numbers"));
}

這足以顯示驗證器應具有的行為。

我將在每種測試方法中放置足夠的示例,以顯示代碼的寶貴性質。 嘗試一下。 有些人更喜歡“每個測試一個斷言”,但是如果它以不同的方式對您更有效,則不必那樣做。

對於第三方庫,我會考慮它們為您所做的有價值的工作,然后將它們包裝在另一個可以模擬的類中。 Moq是我最喜歡的.NET模擬框架選擇。

對於UI測試,尤其是網頁測試,我將看一下Selenium.NET。 但是,這用於測試整個系統-我們通常不對UI元素進行單元測試。 這部分是因為它既困難又昂貴,並且部分是因為實際上查看它們,使用它們並在上下文中使用它們是檢查它們行為是否正常的唯一方法。

QUnit是我見過的用於Javascript測試的框架,如果您正在頁面中使用它並且也想對其進行測試。

是的,我會測試“所有內容”,但是,用戶界面測試通常很復雜且難以測試,出於實用主義的考慮,我會盡量減小您的UI代碼,並且要小心。

明確地測試所有“業務代碼”。

從經驗上來講,很難學習如何有效地進行單元測試,但是一旦我開始更頻繁地應用依賴注入模式,它就會變得更容易測試。

嘗試一次只測試一件事-測試“系統”往往會使系統測試變得復雜而脆弱。

當我說“脆弱”時,我的意思是“對系統的一部分進行簡單的更改就意味着您必須重寫一半的測試”。 您想要的是僅對實際測試該代碼的一些測試產生更改影響。

除了在這里同意其他答案外,我還將添加一個實用的觀點,我發現它非常有用。

當學習編寫測試並習慣測試范式時,通常很難知道從哪里開始以及首先要測試什么。 測試所有東西都是可以實現的理想選擇,但是馬上可以做的事情有一個務實的方面。

考慮到您正在處理Web項目,我發現非常有用的一件事就是開始測試代碼,該代碼需要大量的工作才能以通常的方式進行測試。

我在最近的一個項目中得到的一個例子是,根據博客作者的供稿,將一些博客機制集成到我們的網站中。 為了測試我的代碼,我將必須構建博客項目,然后構建引用該博客項目的Web項目(在Visual Studio中大約需要3分鍾),然后導航到有問題的頁面(等待代碼發布)通過在構建后首次運行時的事件順序),然​​后測試我感興趣的實際事物。

為了使此過程變得更加容易,您可以開始針對此類情況編寫測試。 我通常是TDD和測試的擁護者,我發現這種方法確實為開發人員提供了一個更扎根的想法,即測試如何以及為什么有用。 通過減少測試某些功能所需的時間和步驟,您確實可以立即看到好處。 經理們也可以高度贊賞這一點。 (它比一些更理想的概念和圍繞測試的玩笑少一些蓬松度)。

這種方法還使您進入編寫測試的有趣方面。 像其他任何事情一樣,如果您首先了解如何享受這一過程,那么您更有可能繼續這樣做。

我曾與許多布道者一起工作,他們不顧新開發人員通過測試可能發現的任何樂趣或興趣,並使整個過程變得非常虔誠。 使測試變得有趣,您更有可能想要測試更多的代碼。

對於大型應用程序,測試一切都不現實。 即使對於小型應用程序,您也將花費大量時間來編寫所有內容的單元測試。 實際上,只有一小部分系統值得進行單元測試,因為大多數代碼都在執行瑣碎的邏輯,而對其進行測試並沒有真正的好處。 如果您按小時支付工資並且有無限的時間,我會說繼續進行所有測試。 但是,如果您在時間線上工作,那么您必須對測試內容保持精明。

暫無
暫無

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

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