我是网络开发的新手,并有以下问题
我有网站项目。我在App_Code文件夹中有一个datacontext类,其中包含使用数据库的方法(dbml schema也存在于那里)和不直接干扰db的方法。我想用NUnit测试这两种方法。
由于Nunit使用.dll或.exe中的类,我明白我需要将整个项目转换为Web应用程序,或者移动我想要测试的所有代码(即:整个内容App_Code)到类库项目并引用网站项目中的类库项目。
如果我选择将方法移动到单独的dll,问题是如何测试那些使用数据库的方法? :
我是否必须创建连接 运行前在“setup”方法中使用db 每种这样的方法?这是正确的,在这种情况下不需要运行Web应用程序吗?
或者我需要在此期间进行此类测试 网站运行时的时间 连接建立?在这种情况下如何设置项目和Nunit?
或其他方式..
其次,如果某个方法依赖于我的.config文件中的某些设置,例如某些网络凭据或smtp设置,那么测试此类方法的方法是什么?
我将非常感谢任何帮助! 它越具体越好。 感谢。
答案 0 :(得分:1)
通常,您应该模拟数据库,而不是真正连接到它以进行单元测试。这意味着您提供了返回预设结果的虚假数据访问类实例。通常你会使用一个模拟框架,比如Moq或Rhino为你做这种事情,但是很多人也只是编写自己的一次性类来达到同样的目的。您的测试不应该依赖于生产网站的配置设置。
这样做有很多原因,但主要是将测试与实际的数据库实现分开。您所描述的将产生非常脆弱的测试,需要大量的维护。
请记住,单元测试是为了确保代码的一小部分能够正常工作。如果你需要测试一个复杂的操作是从上到下工作(即一切都在用户点击某些东西,从数据库获取数据,返回它和更新UI的步骤之间起作用),那么这称为集成测试。如果您需要进行完整的集成测试,通常建议您重复生产环境 - 我的意思是完全重复,相同的硬件,软件,一切 - 您运行集成测试