2017-02-27 94 views
3

假设我们有一些使用REST API的Web服务,并且为了说明,有一些与数据库有关的工作。在我看来,测试这个应用程序的最基本的方法是集成测试,它从REST API的顶部对它进行测试,以验证它是否能正确工作。但是使用一些嘲讽技术进行单元测试呢?在专业开发中(当然是有限的人力资源)真的有必要用单元测试覆盖代码,即使它已经被集成测试覆盖了吗?我是否应该通过单元测试覆盖代码,即使它已经被集成测试涵盖了?

谢谢

+1

我会留下这里作为评论:D可能值得一看https://www.youtube.com/watch?v=VDfX44fZoMc – JSelser

+1

这是非常好的解释,谢谢你!但我有这样的感觉,即使是最好的解决方案,在通常的企业实践中,几乎不可能写出如此高度结构化的单元测试。所以我在通常的公司Java项目上看到的是,在一致性方面存在彼此独立的非常孤立的单元测试,这些测试功能非常值得怀疑。 – Jurass

+0

http://stackoverflow.com/questions/42469686/does-unit-tests-still-matter-if-functional-tests-is-satisfied/42476254#42476254只是在这里回答同样的问题,将重新发布答案,因为不能投票关闭作为重复,因为它没有任何upvotes /接受 – dm03514

回答

1

好问题。当然,答案是基于意见的,但希望它们基于实际的实际经验。

就我而言,多年来我已经编写了数千次JUnit/TestNG测试,并且我恰好为Java开发了一个高级测试库(模拟+代码覆盖+集成测试)。

所以,国际海事组织,当你已经有一个好的集成测试套件时,编写单元测试是不需要的,也没有什么效率。

集成测试确实需要更长的时间才能运行,但它们应该足够快,以免开发人员不愿意运行它们。这一点很重要:如果开发者在开发新代码或修改时仍然可以运行一个测试,一个测试类等,那么它很好。因此,避免集成测试方法(例如Selenium)使测试执行过于缓慢/痛苦。

另一个针对集成测试的批评是,它们使得找出测试失败的根本原因更加困难。虽然这在实践中并不是一个足够大的问题。

Martin Fowler在他的Unit Test文章中提出了相同的两点。