Java 进入测试阶段

Java 进入测试阶段,java,unit-testing,testing,Java,Unit Testing,Testing,现在,我对使用Java进行编程/开发有了相当好的理解 有谁能告诉我开始使用测试包的最佳方式吗?我已经看过Hibernate了,但还不确定该去哪里 我在MacOSX上使用Eclipse3.5。这是一个编写脚本来测试方法的案例吗?什么是单元测试?等等 我从哪里开始 非常感谢。Alex首先:Hibernate不是一个测试包 现在这已经不重要了,我建议你看看JUnit。首先阅读单元测试,了解它是什么(Wikipedia条目是一个很好的开始),然后尝试JUnit cookbook。为一小段代码编写一些单元

现在,我对使用Java进行编程/开发有了相当好的理解

有谁能告诉我开始使用测试包的最佳方式吗?我已经看过Hibernate了,但还不确定该去哪里

我在MacOSX上使用Eclipse3.5。这是一个编写脚本来测试方法的案例吗?什么是单元测试?等等

我从哪里开始


非常感谢。Alex

首先:Hibernate不是一个测试包

现在这已经不重要了,我建议你看看JUnit。首先阅读单元测试,了解它是什么(Wikipedia条目是一个很好的开始),然后尝试JUnit cookbook。为一小段代码编写一些单元测试,看看它是如何工作的,然后继续进行更大的测试

在进行测试时,请查看其他开发工具,如Cobertura(用于了解您的测试覆盖率有多好)和静态分析工具,如Findbugs和Checkstyle。这些都很好地与Ant集成,可能还与Eclipse集成

如果您对改进编码标准和构建系统感兴趣,那么我强烈建议您使用Ant、JUnit、Cobertura、Checkstyle和Findbugs以及持续集成服务器(如Hudson或CruiseControl)和版本控制系统(如git)。有了这样的工具包,你不会出错

还有其他的框架(TestNG、Mockito等),所以也看看它们,然后决定您喜欢哪一个(编辑:哪一个可以很好地协同工作。Mockito+JUnit是一个很好的组合。)

什么是单元测试 正在编写代码(即测试代码),将已知输入传递到测试代码中,然后验证测试代码返回预期输出。这是您可以在应用程序上执行的最细粒度测试。为了简化,通常使用单元测试框架。对于Java来说,它是最流行的,但也值得注意

开始 单元测试框架为测试执行、验证和结果报告提供了工具。对于您的设置。Eclipse能够在IDE中自动检测测试、编译测试和测试下的代码、执行测试和报告结果。此外,故障报告为可单击的堆栈跟踪信息,以给定行号加载相应的文件

模拟对象 您也在使用Hibernate,这表明您也在进行调查,例如。模拟对象通常被替换为测试组成的代码的一部分,并用于两个目的:(1)返回已知的输出和(2)记录它们被调用的情况,以及单元测试如何内省这些信息作为验证的一部分

使用模拟对象使测试更容易的能力取决于。也就是组成测试对象的其他实体。其思想是分离依赖关系(例如Hibernate),以集中于测试操作您正在使用的数据的算法

数据库 然而,如果您有不容易的代码,或者您想验证数据库代码,那么您也可以测试Hibernate交互。在这种情况下,您需要一个处于已知状态的数据库。我想到了三种方法:

  • 在每次测试执行开始时恢复数据库备份
  • 使用,它为维护状态提供了自己的机制
  • 具有回滚的事务锁定。包装整个案例使用
    try{}finally{}
    包装,后者总是回滚事务
  • James Shore(“敏捷软件开发社区中的思想领袖”)有一系列他使用Eclipse演示测试驱动开发的屏幕模型


    虽然有很多方法可以开始测试,但没有“最佳”方法,因此没有必要将其作为起点

    在网上搜索一个关于junit的好教程,然后去做。这将是开始IMO的绝对最佳方式。不要偏离代码覆盖范围或与Hudson集成或任何其他测试外围任务。如果先进行测试,则重点写几个(或10个)


    一旦您了解了基础知识,您就可以开始查看其他工具,看看它们是否比junit更好或更差地满足您的需求

    我不使用Hibernate,我以为它是一个测试框架。。。我认为JUnit是前进的方向。@AlexW:明白了。注意,当您开始编写测试时,理解模拟对象和依赖项注入(DI)仍然非常有用。有时,刚接触单元测试的人遇到的最大问题是如何处理数据库(例如,我有两条记录,现在我有三条!)。mock和DI允许您先测试算法,然后再回来测试数据是如何移入和移出数据库的。