Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如果我的应用程序只调用BLL方法,为什么要对我的SQL、DAL和BLL进行单元测试?_Visual Studio_Unit Testing_Business Logic - Fatal编程技术网

Visual studio 如果我的应用程序只调用BLL方法,为什么要对我的SQL、DAL和BLL进行单元测试?

Visual studio 如果我的应用程序只调用BLL方法,为什么要对我的SQL、DAL和BLL进行单元测试?,visual-studio,unit-testing,business-logic,Visual Studio,Unit Testing,Business Logic,我已经使用VisualStudio集成测试环境进行了一些测试, 它们通过调用BLL方法来模拟我的web应用程序的功能 (它们只是UI层应该知道并与之交互的对象) 所以,如果他们的行为是正确的——我通过了考试——为什么要这样做呢 我为较低的层编写测试,如DAL/存储过程 文学建议我做什么?以努伊特人的背景说话 测试SPs/数据访问并不容易。您必须确保每次运行测试时都有一个“干净”的数据库,在开始时就有预期的数据,以确保获得预期的结果。因此,您要么每次都需要从干净的备份中恢复一个db,要么确保您的测

我已经使用VisualStudio集成测试环境进行了一些测试, 它们通过调用BLL方法来模拟我的web应用程序的功能 (它们只是UI层应该知道并与之交互的对象)

所以,如果他们的行为是正确的——我通过了考试——为什么要这样做呢 我为较低的层编写测试,如DAL/存储过程
文学建议我做什么?

以努伊特人的背景说话

测试SPs/数据访问并不容易。您必须确保每次运行测试时都有一个“干净”的数据库,在开始时就有预期的数据,以确保获得预期的结果。因此,您要么每次都需要从干净的备份中恢复一个db,要么确保您的测试在测试开始之前使用所需的数据设置数据库

理想情况下,单元测试应该尽可能快地运行,这也是为什么在单元测试时DAL经常被模仿的原因之一,以消除代价高昂的数据库交互过程。您必须小心的是,如果您确实为SPs/DAL编写了“单元测试”,那么对测试执行时间的影响可能会急剧增加,根据我的经验,这可能会导致人们不运行测试,因为它们花费的时间太长。特别是在持续集成环境/构建环境中,测试运行的时间越长,准备构建的it任务就越长


我个人的观点是,我喜欢在单元测试中结合使用模拟和实际的db访问,因为我想知道我的代码将按照预期一直运行到db,以捕捉愚蠢的错误,如SP丢失/错误(介于单元/集成/功能测试之间)。但在不太重要的地方,我使用mock。

端到端测试很好,可以确保应用程序在特定场景下工作

Misko Hevery在他的博客上发表了一篇很好的文章,他将单元测试、集成测试和端到端测试分开

单元测试 单元测试检查函数方法中的逻辑是否正确,错误处理是否正确。这些测试最好以毫秒而不是秒运行。如果函数需要与DAL之类的东西交互,那么应该模拟DAL的接口,因为真正的交互需要很长时间才能运行。它们提供了最佳的投资回报

集成测试 这一级别的测试检查业务逻辑层之间的交互是否确实执行了它们应该执行的操作。在这里,单元测试将与接口(如DAL)交互,并检查“接线”是否正确。应该有一些,但不要太多,因为这会影响构建时间

端到端测试 这些都很好,因为它们检查从UI到DAL的所有东西是否都连接在一起。这些测试将测试更多的“连线”,并检查您的用户所能做的不会杀死您的应用程序。这些测试还可以包括您的测试和Web测试,例如,正在通过的测试


单元测试提供了最佳的投资回报,并将捕获比其他领域更昂贵的bug,但将这些bug很好地混合在一起是很好的。

请参见下面AutomatedTester所做的区分,但听起来您编写的不是每个“单元”都被隔离的单元测试,而是集成测试?