Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#桌面应用程序中对特定功能执行单元测试?_C#_Unit Testing - Fatal编程技术网

如何在c#桌面应用程序中对特定功能执行单元测试?

如何在c#桌面应用程序中对特定功能执行单元测试?,c#,unit-testing,C#,Unit Testing,我有一个函数名为load引文 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);

我有一个函数名为load引文

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注入漏洞!)。然后,您的测试将模拟该服务(使用类似于
NSubstitute
Moq
),并且您可以验证模拟返回的数据是否正确存储在
dgeview引文中


请注意,UI通常是单元测试的可怕候选对象,正确的方法是将它们作为实际逻辑上非常薄(尽可能薄)的一层,然后对逻辑进行单元测试。MVVM之类的体系结构模式试图对此有所帮助。

您有一个SQL注入漏洞。您要测试的方法是什么?一旦你得到了答案,你就知道该在测试中放什么了。@SLaks我们没有SQL注入的标准问题吗?拿起一本关于这个主题的书。编写好的单元测试是一项技能,就像其他技能一样——你需要学习它。你写的代码是不可测试的