如何在c#桌面应用程序中对特定功能执行单元测试?
我有一个函数名为load引文如何在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);
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注入的标准问题吗?拿起一本关于这个主题的书。编写好的单元测试是一项技能,就像其他技能一样——你需要学习它。你写的代码是不可测试的