我有很多对象的方法需要访问数据库。我们希望进入单元测试,但如果可能的话,我们希望避免使用模拟对象。我想知道是否有一种方法可以重构下面显示的 Validate 方法,以便它不需要数据库访问。在实际应用中,通常会有更多的事情发生,但我认为这个简化的例子应该足够了。
如果需要,我们将学习使用模拟对象,但这看起来开销很大,所以我正在寻找替代方案。
public class Person
{
public string Name;
public string Validate()
{
if (PersonDA.NameExists(Name))
{
return "Name Already Used";
}
}
}
最佳答案
就我个人而言,我只是走模拟对象路线。它更加灵活,听起来您想走将测试代码放入实际对象的路线?
无论如何,使用 boolean isValid(Person) 方法将验证代码提取到 PersonValidator 对象中。然后在测试代码中使用一个模拟验证器,它只根据测试用例返回 true 或 false。
关于database - 避免在没有模拟的情况下进行单元测试的数据库依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962860/