我一直对我自己的一个比较大的系统,这是我第一次的大型系统(处理同时的信息200+渠道)上工作。 我知道如何使用JUnit测试每个方法,以及如何测试边界条件。 但尽管如此,对于系统测试,我需要测试所有的接口,可能使一些压力测试,以及(也许还有其他的事情要做,但我不知道他们是什么)。 我是全新的测试的世界,请给我一些建议或点我一个良好的代码测试人员会怎么做系统测试的一些信息。
PS:2个的具体问题我有是:如何测试私人的功能呢? 如何测试接口和避免副作用?
我一直对我自己的一个比较大的系统,这是我第一次的大型系统(处理同时的信息200+渠道)上工作。 我知道如何使用JUnit测试每个方法,以及如何测试边界条件。 但尽管如此,对于系统测试,我需要测试所有的接口,可能使一些压力测试,以及(也许还有其他的事情要做,但我不知道他们是什么)。 我是全新的测试的世界,请给我一些建议或点我一个良好的代码测试人员会怎么做系统测试的一些信息。
PS:2个的具体问题我有是:如何测试私人的功能呢? 如何测试接口和避免副作用?
这里有两个网站,可以帮助:
首先是名单的开源Java工具 。 许多工具插件JUnit的,允许以更高的集成度也更易测试或测试。
根据您的系统,有时JUnit会为系统测试工作,但测试的结构可以是不同的。
至于私有方法,检查这个问题 (和它引用的问题)。
你不能测试接口(因为没有行为),但你可以测试一个接口的实现遵循其合同创建一个抽象的测试类。
编辑:另外,如果您还没有单元测试,检查工作用途不同修改代码 ; 它是未设置好测试测试代码是必须的。
嘲讽是一个好办法,能够模拟在单元测试系统测试; 通过替换(嘲笑)在其上的其他部件所依赖的资源,则可以无需具有构造为做到这一点,整个系统中的“系统样”环境中执行单元测试。
关于你提到的具体问题:通常,你不应该使用单元测试来测试私有函数; 如果它们是私有的,他们是私有的类。 如果你需要测试的东西,测试它使用私有方法做一些事情的公共方法。 避免副作用,可以是潜在的问题,如上所述,最好使用一个完整的测试环境(其可容易地擦去回到“处女”状态),或使用嘲笑完成,。 和测试接口是通过做,好了,测试的接口方法。
首先,如果你已经有一个不具有任何单元测试的大系统中,并且你打算加入一些,然后让我提供一些一般性的建议。
从维护系统,并与它的工作,你可能已经知道这往往是buggiest系统的地区,往往经常改变,并且往往不会发生很大的变化。 如果不这样做,你可以随时通过源代码控制日志(您使用的源代码控制,对吧?),以找出大部分的bug修复和变化都集中看。 关注这些类和方法的测试工作。 有他们的这是一个叫80/20法则是适用于整个范围内的事情一般规则。
它说,大致平均,你应该能够做的工作只有20%,以补足80%的违规案件。 也就是说,通过对代码的仅有20%编写测试,你也许可以赶上的bug和回归的80%。 这是因为大多数脆弱的代码,常用改变代码和最差的违规代码拼成的代码库的20%。 事实上,它可能会更小。
您应该使用JUnit来做到这一点,你应该使用类似JMock的或其他一些嘲讽库,以确保您在隔离测试。 对于系统测试/集成测试,就是测试的事情,当他们一起工作,我可以推荐FitNesse的 。 我已经在过去与它很好的经验。 它可以让你写你的测试中使用简单的表样布局,在那里你可以很容易地定义你的投入和预期产出Web浏览器。 所有你所要做的就是写称为灯具小支持类,它处理组件的创建。
当公共职能调用它们的私有函数将受到考验。 你的公共职能的测试只关心返回的结果是正确的。
当处理API(到其他包或URL或甚至文件/网络/数据库),你应该嘲笑他们。 一个好的单元测试应该在几毫秒内未在几秒钟内运行。 嘲讽的是做到这一点的唯一方法。 这意味着,包间的错误可以在功能层面很多比逻辑错误更容易处理。 对于Java EasyMock的是一个很好的模拟框架。
您可能有这个名单一看: 工具数据库为中心的Java应用程序的回归测试/自动化测试? 对于有趣的工具列表。
你似乎已经使用JUnit广泛那就意味着你已经“测试传染”,这是一个好点...
在我个人的经验,最难管理的是数据。 我的意思是,控制非常敏锐地agaisnt该测试拼命地跑数据。
之前给出的工具列表是有用的。 从个人的经验这些都是我觉得有用的工具:
嘲讽-是的Mockito一个很好的实现,具有巧妙的技术,以确保你只有嘲笑你真正关心的方法。
数据库测试- DbUnit是indespensible用于设置测试数据和验证数据库交互。
压力测试- 的JMeter -一旦你看到通过略微笨重的GUI这是设置方案和运行压力测试的一个非常强大的工具。
至于一般的做法开始通过设法获得通过应用程序通常的“幸福路”运行测试这些都构成了回归测试和性能测试的基础。 一旦完成,你可以开始寻找边缘情况和错误情况。
虽然这个级别的测试应该是次要的良好的单元测试。
祝好运!