簡體   English   中英

如何在c#桌面應用程序中對特定功能執行單元測試?

[英]How to perform unit testing for a particular function in c# desktop application?

我有一個名為LoadCitation的函數。

public void LoadCitation()
    {

        cmd = new SqlCommand("select * from tbl_Users where isLogin=1", con);
        sqlDataAdapter = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        sqlDataAdapter.Fill(ds);
        String username = ds.Tables[0].Rows[0]["username"].ToString();
        sqlDataAdapter = new SqlDataAdapter("select id,title,author1_fname,author1_lname,author2_fname,author2_lname,author3_fname,author3_lname,doctype,year,publisher,abstract,nameofdoc,issue,volume,pgno,url,accessdate,notes,tag from tbl_Citation  where username ='" + username + "'", con);
        DataSet = new DataSet();
        con.Open();
        sqlDataAdapter.Fill(DataSet, "tbl_Citation");
        con.Close();

        dgeviewcitation.DataSource = DataSet;
        dgeviewcitation.DataMember = "tbl_Citation";
    }

我想為此方法執行單元測試。

[TestClass()]
public class EditcitationTests
{

    [TestMethod()]
    public void LoadCitationTest()
    {

    }
}

我已經創建了方法,但不知道該在函數內部編寫什么以進行單元測試...

如所寫,此方法不可單元測試。

那是因為它對外部資源有嚴格的依賴性。 如果測試在沒有設置數據庫的環境中運行怎么辦? 您如何知道數據庫中將包含哪些數據? 單元測試永遠都不應離開其類(以及任何模擬)。

因此,首先,您需要將該SQL放入注入到表單的服務中(還可以解決SQL注入漏洞!)。 然后,您的測試將模擬該服務(使用NSubstituteMoq類的東西),並且您可以驗證模擬返回的數據是否正確存儲在dgeviewcitation

請注意,UI通常是單元測試的糟糕選擇,正確的方法是將UI置於實際邏輯上非常薄(盡可能薄)的層上,然后對邏輯進行單元測試。 諸如MVVM之類的架構模式試圖對此提供幫助。

暫無
暫無

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

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