单元测试
如果某些测试是在应用程序中编写的,则大多数将是单元测试。 仅通过调用所有实用程序方法,传递一些值并检查是否返回了预期的结果来测试实用程序类很容易。
这里出现第一个错误 。 大多数人没有开箱即用的想法,或者不够。 您可以测试1 +1 = 2,2 +1 = 3以及3 +1 =4。但是,进行几乎相同的测试3次有什么好处? 最好测试边界情况。 sum()方法的参数是原始类型还是对象? 如果它们是对象,则传递空值会怎样? 如果引发异常,那是预期的异常吗? 是否清楚地说明了问题所在?
CK
例如,如果服务层经过了单元测试,则应模拟所有其他组件(如DAO层)。 在许多情况下,这是手动完成的。 那是第二个错误 。
通过手动模拟,您的模拟将与实现紧密耦合。 最好使用模拟框架。 他们为此而生。 只要相信他们会以您想要的方式创建模拟即可。 一些模拟框架比其他框架能做更多的事情,一些框架比其他框架更易于使用。 我最喜欢的模拟框架是Mockito,因为它功能强大且简单。 EasyMock是迄今为止最著名的,但是imo使用起来有点复杂。 又是什么顺序? 期待,重播,断言还是……?
因此,这不仅是选择模拟框架的问题。 选择正确的对象也是一个问题。
集成测试
集成测试是对应用程序不同集成部分的测试,而单元测试仅测试LUW(逻辑工作单元)。 集成测试中最著名的类型是DAO层的测试。 在这些测试中,将验证多个方面:输入参数,ORM工具的使用,所生成查询的正确性(功能性),是否可以访问数据库,查询是否有效以及正确的事实。返回ResultSet。
经常犯的第三个错误是,开发人员在dbUnit XML数据集中提供了测试数据。 在大多数情况下,此数据不代表实时数据。 处理此问题的最佳方法是让职能人员提供并维护此测试数据。 因为您不想让它们使用特定的XML格式,所以使用XlsDataSet格式是一个好习惯。 可以在Excel工作表中提供数据。 选项卡的名称是表,在第一行中,每一列都包含该列的名称,在所有其他行中,添加有效数据。 每个选项卡的选项卡从左到右都将插入DB中。 删除是通过另一种方式完成的。
功能测试
功能测试经常被遗忘,因为人们认为它们很难维护且成本很高。 的确,您必须对其进行调整以使它们可维护,但是一遍又一遍地手动执行所有相同的测试会花费更多。 同样,当通过持续集成对功能进行测试和自动化时,也无需担心屏幕/功能将在下一版本中破坏。
Selenium是一个很棒的框架,能够在浏览器中记录功能。 这里犯了第四个错误 。 大多数人只会按照自己的方式记录和重放测试。 Selenium通过其HTML ID跟踪HTML组件。 如果您未在HTML代码中指定id,则在更新页面时可以轻松更改它们。 即使功能仍然有效,这也会立即破坏测试。
第五个错误是仅将记录的测试粘贴到JUnit测试中。 诸如登录和注销,等待响应的时间等常用功能应添加到更高级别。 例如,可以在每次测试之前进行登录,然后进行注销。 这样,如果登录或注销功能发生某些变化,测试将不会中断。
第六个错误是缺少测试逻辑流。 插入,搜索,更新和删除完全可以独立工作,但是从创建,搜索,更新直到删除相同条目的整个流程将不起作用。 TestSuite是将多个测试组合在一起并按顺序运行它们的好方法。
BDD
错误七 :大多数测试是技术测试,而不是功能测试。 测试逻辑行为比测试事物在技术上是否有效更为重要。 这可以通过行为驱动设计来完成。
从某些方面来看,当事件发生时,结果应该是什么? Mockito有一些很棒的东西,可以轻松地以BDD方式编写测试。
参考: about:software开发博客上来自我们JCG合作伙伴 Glenn Dejaeger的7个软件测试错误 。
翻译自: https://www.javacodegeeks.com/2012/01/7-mistakes-of-software-testing.html