簡體   English   中英

VS2017項目的單元測試

[英]Unit Testing for VS2017 project

我在VS2017中有一個ASP.NET應用程序(一種捕獲一些輸入的基本形式)。

表單上的字段之一是Mark,它是一個整數。

我的.cs文件中有以下用於Mark的代碼塊。

    [Display(Name = "Mark")]
    [Range(1, 10, ErrorMessage = "Mark must be between 1 and 10")]                              
    public int Mark{ get; set; }

我已經為此應用程序創建了一個MSTest項目來編寫單元測試。

我的問題是,您是否為此塊編寫測試用例,以驗證輸入值在預期范圍內?

如果是的話,你怎么寫的?

我從這個開始。

    [DataRow(0, "Mark must be between 1 and 10")]
    [DataRow(11, "Mark must be between 1 and 10")]
    [DataTestMethod]
    public void TestMark_IsMarkValid_NotValid(int mark, string expectedMsg)
    {
        //Arrange
        Student testStudent = new Student();
        testStudent.Mark = mark; //this does not throw any error, although the assigned value is outside of the defined range. But it looks like the range validation only applies to the webform.

        //Act

        string actualMsg = "Mark must be between 1 and 10"; //this is not correct. I was thinking to capture in the actual result the error message yield by the Range validation, but assigning a value outside range doesn't yield any error message. 

        //Assert
        Assert.AreEqual(expectedMsg, actualMsg);
    }

現在,不確定該塊是否在單元測試范圍之內。 如果應該的話,我感覺我所采用的方法是不正確的。

有什么想法嗎?

非常感謝,Cosmin

有趣的問題。 我不確定是否有絕對正確的答案。 但是這是我的想法:

1)“標記”是一個屬性。 我們不需要對屬性進行單元測試,因為Microsoft已經測試了該屬性可以工作。

2)屬性不會影響屬性,但是會提供有關其他人可以使用的屬性的信息。 這就是為什么您的單元測試通過該值的測試的原因。 該表單使用屬性,而單元測試則不使用。 這就是為什么您的單元測試可以分配任何值的原因。

3)如果您確實想限制變量的值,則將其限制在Student類中-通過設置器或顯式的get / set和后備變量-您永遠不能信任瀏覽器提交的任何數據。

4)測試UI並不容易。 我們有一個手工測試的測試團隊。 我們嘗試了幾種工具,但沒有一個是出色的。 將您的業務邏輯放在UI之外,並將其放在易於測試的業務類中。

因此,為回答您的問題,我個人不會測試該屬性是否在單元測試中起作用。

希望對您有所幫助。

暫無
暫無

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

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