我有一些使用ASP.NET的项目,我为我的项目中的某些函数创建了单元测试,这些函数不涉及数据库。但是,我还没有为涉及数据库的其他部分创建单元测试。
我不知道如何为整个项目进行完整的单元测试。 以及如何为涉及数据库的某些函数创建单元测试?
答案 0 :(得分:0)
单位测试,顾名思义,应该是一个真正的单位,应该是可以独立测试的。当函数依赖于某些外部因素(如服务或数据库调用)时,很难预测结果,因为其他几个因素会起作用,如网络可用性或延迟等。
为了确保我们的方法应该独立于外部依赖,我们建议我们必须在我们的测试应用程序中模拟它们。这可以通过任何兼容的模拟框架来实现,一个这样的框架是在https://github.com/moq/moq4找到的Moq框架
答案 1 :(得分:0)
在ASP.NET中处理此问题的常用方法是创建如下的接口:
public interface IDatabase
{
void Delete(MyItemType item);
void Update(MyItemType item);
void Insert(MyItemType item);
}
然后编写未经测试的方法或其父类以将接口作为依赖参数接受,然后创建一个具体的包装类:
public class DatabaseImplementation : IDatabase
{
//Implement interface here and wrap calls to real database
}
然后你需要注入这个类,这可以手动完成,但我强烈建议阅读有关控制和依赖注入的反转。然后,您可以使用Castle Windsor或StructureMap等控制框架的反转来自动处理事物。
这现在为您提供完整的单元测试控制,因为您可以使用像moq这样的模拟框架来创建IDatabase的模拟实现,这将允许您指示模拟在调用Delete,Update,Insert等时的行为方式
如果您觉得有用,可以使用控制框架的反转来自动注入单元测试中的模拟。
我知道这听起来像很多阅读和工作,但这些概念使单元测试变得美观,并鼓励您以可维护的方式设计代码。
祝你好运!