我试图理解TDD,但是我所看到的所有示例都显示了诸如add(),substract()等方法。我了解如何通过unittest进行测试。但是如何测试没有参数的方法呢?
例如,您将如何为该方法编写测试方法?
public List<string> testmethod()
{
List<string> ret = new List<string>();
using (SqlConnection conn = new SqlConnection(constring))
using (SqlCommand cmd = conn.CreateCommand())
{
SqlDataReader reader;
cmd.CommandText = "select * from users";
conn.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
ret.Add(reader["name"].ToString());
}
conn.Close();
}
return ret;
}
我的意思是,您必须测试什么?
最佳答案
从技术上讲,您不会对该方法进行单元测试。由于代码已耦合到数据库,因此将是一个集成测试。 (如果要将逻辑与数据访问分开测试,则可以将其分为两个部分,一个与逻辑一起,另一个与数据访问一起。)
除了那小小的nitpick,模式是相同的。任何可重复的自动化测试都应包含三个步骤:
安排
法案
断言
假设“ Act”步骤就是这样:
var result = testmethod();
那么,什么是“声明”步骤?您怎么能知道这种方法应做的事?它返回一个结果,所以我想您会检查该结果,以了解在给定的已知条件下它是否正是您所期望的。
这些条件是什么?那是“安排”步骤。这个想法是您建立一个已知的方案,在该方案中您可以预期一个已知的结果。然后执行代码。然后,您检查结果是否符合预期。
例如,代替您已经知道如何测试的
Add(1, 1)
示例,请考虑以下对象:public class Adder
{
public int Augend { get; set; }
public int Addend { get; set; }
public int Add()
{
return Augend + Addend;
}
}
(我知道这是一个愚蠢的东西,但是要忍受我。)
您将如何单独测试该方法?首先设置环境:
// Arrange
var adder = new Adder();
adder.Augend = 1;
adder.Addend = 1;
// Act
var result = adder.Add();
// Assert
Assert.AreEqual(2, result);
在您的情况下,“排列”步骤可能会涉及到很多,因为可以直接访问数据库。但是概念是相同的。测试首先创建系统的已知状态,然后执行操作,然后检查系统的新状态。 (如果状态的创建和状态的检查以及之后留下的副作用有些繁琐,那么这很好地表明了代码中的耦合过多,并且您希望将其分解开一点点。)
关于c# - 如何为没有参数的方法编写测试方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26465421/