我有一个名为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()
{
}
}
我已经创建了方法,但是不知道在单元测试中要写什么...
答案 0 :(得分:1)
按照书面规定,该方法不可单元测试。
那是因为它对外部资源有严格的依赖性。如果测试在没有设置数据库的环境中运行怎么办?您如何知道数据库中将包含哪些数据?单元测试绝不能离开其类(和任何模拟)。
因此,首先,您需要将该SQL放入注入到表单的服务中(还可以修复SQL注入漏洞!)。然后,您的测试将模拟该服务(使用类似NSubstitute
或Moq
的服务),然后您可以验证模拟返回的数据是否正确存储在dgeviewcitation
中。
请注意,UI通常是单元测试的糟糕选择,正确的方法是将UI置于实际逻辑上非常薄(尽可能薄)的层,然后对逻辑进行单元测试。诸如MVVM之类的架构模式试图为此提供帮助。