Unit testing 何时执行单元测试以及为什么使用Moq

Unit testing 何时执行单元测试以及为什么使用Moq,unit-testing,testing,moq,repository-pattern,Unit Testing,Testing,Moq,Repository Pattern,Q1:什么时候运行单元测试比较理想?是否应该在每次调试应用程序之前运行它?在我向svn提交更改之前是否应该运行它们?我认为,如果一个应用程序只有几个单元测试,那么它应该在每次应用程序即将调试时运行。但假设我们有数百个单元测试需要花费一点时间才能完成,不确定这是否理想。我认为最好在提交或部署之前运行它们 Q2:在我的应用程序Im中,使用带有服务层的存储库模式。我研究了在服务调用存储库并且存储库查询数据库时如何测试服务。因此,为了使它成为真正的单元测试而不是集成测试,我必须找到一种不接触数据库的测试

Q1:什么时候运行单元测试比较理想?是否应该在每次调试应用程序之前运行它?在我向svn提交更改之前是否应该运行它们?我认为,如果一个应用程序只有几个单元测试,那么它应该在每次应用程序即将调试时运行。但假设我们有数百个单元测试需要花费一点时间才能完成,不确定这是否理想。我认为最好在提交或部署之前运行它们

Q2:在我的应用程序Im中,使用带有服务层的存储库模式。我研究了在服务调用存储库并且存储库查询数据库时如何测试服务。因此,为了使它成为真正的单元测试而不是集成测试,我必须找到一种不接触数据库的测试方法。我发现人们正在使用Moq来模拟他们的存储库。这就是我的问题所在,对我来说,如果我模拟一个存储库,那么我就改变了方法的工作方式,对我来说,这似乎是一个毫无意义的单元测试。看起来您实际上并不是在测试您的代码。我完全错了吗?谢谢你的建议。

让我试一试

A1:当您重构现有代码时,您应该执行相应的单元测试(不是全部),并查看您的更改是否破坏了任何内容。对于新功能,您应该使用TDD并行实现新的单元测试。您永远不应该自己执行所有的单元测试,而应该使用或依赖持续集成

我和你有同样的看法。但现在,我确信需要对服务层进行单元测试。应该涵盖使用单元测试可以涵盖的任何内容。此时,服务的核心可能只是对存储库的委托,但服务会不断发展。这些服务承担了参数验证、授权、日志记录、事务、批处理支持API等职责。然后,它不仅仅是数据访问,还有更多的事情。如果我处在你的位置,我会通过模拟存储库来进行服务的单元测试。有时,服务在存储库的顶部提供方便的方法


希望它能对你有所帮助。

A1。当您对代码进行更改时,您运行单元测试的频率越高,您就越快获得关于它们被编写为断言的行为是否受到影响的反馈,因此越频繁越好!单元测试应该非常快,运行几百个单元测试最多只需要几分钟,但它可能值得一看(如果使用java,我希望在.net等中会有一个替代方案),它是eclipse的插件,在eclipse构建项目时自动运行单元测试。只运行自上次运行以来受影响的测试非常聪明,例如,如果您更新了测试,或者如果您更新了某些单元测试所涵盖的“应用程序”代码,则将执行特定的测试

A2。单元测试将涵盖许多不同的场景,这些场景会多次调用您的服务+DAO,使用“真正的”服务将很难保证每次调用的结果(并且为每个测试设置数据可能会很痛苦),但结果也可能很慢。当单元测试模拟这些服务并使用集成测试独立测试它们时,通常会更好