Thomson-Blog ( 学习,学习,再学习;努力,努力,再努力。)
在学习的路上不断成长,成功之路就在脚下。
下面就以Eclipse中单个TestCase为例子讲一下普通的JUnit测试:

    首先我们创建一个Java工程,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返回绝对值:下一步,我们准备对这个方法进行测试,确保功能正常。选中Hello.java,右键点击,选择New->JUnit Test CaseEclipse会询问是否添加junit.jar包,确定后新建一个HelloTest类,用来测试Hello类。选中setUp()tearDown(),然后点击“Next”选择要测试的方法,我们选中abs(int)方法,完成后在HelloTest.java中输入:

 

  JUnit会以以下顺序执行测试:(大致的代码

try {
HelloTest test = new HelloTest(); //
建立测试类实例
test.setUp(); //
初始化测试环境
test.
testAbs(); // 测试某个方法
test.tearDown(); //
清理资源
}
catch…


  setUp()是建立测试环境,这里创建一个Hello类的实例;tearDown()用于清理资源,如释放打开的文件等等。以test开头的方法被认为是测试方法,JUnit会依次执行testXxx()方法。在testAbs()方法中,我们对abs()的测试分别选择正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。

  如果有多个testXxx方法,JUnit会创建多个XxxTest实例,每次运行一个testXxx方法,setUp()tearDown()会在testXxx前后被调用,因此,不要在一个testA()中依赖testB()

  直接运行Run->Run As->JUnit Test,就可以看到JUnit测试结果:

 

  绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。可以试图改变abs()的代码,故意返回错误的结果(比如return n+1;),然后再运行JUnit就会报告错误。

Spring中进行DAO测试

    Spring提供了下列一些特定的JUnit框架扩展:

AbstractDependencyInjectionSpringContextTests—这是一个针对所有测试的超类,其具体使用依赖于Spring上下文。

AbstractSpringContextTests—这是一个针对所有的JUnit测试情形的超类。它使用一个Spring上下文。并且,一般在测试中不是直接使用它,而是使用AbstractDependencyInjectionSpringContextTests或者AbstractTransactionalSpringContextTests这样的派生类。

AbstractTransactionalSpringContextTests—这是一个针对所有测试的超类,我们一般把它应用在事务相关的测试中。注意,一旦完成每个测试它就会正常地回滚事务;而且你需要重载onSetUpInTransaction和onTearDownInTransaction方法以便手工开始并提交事务。

AbstractTransactionalDataSourceSpringContextTests—这是AbstractTransactionalSpringContextTests的一个子类,它使用了Spring的基于JDBC的jdbcTemplate工具类。

所有上面这些扩展将极大程度地简化在测试时对于相关操作的依赖性注入和事务管理。

       下面就以一个用户DAOHibernateUserDao类中的一个方法getPasswordByName(String userName)进行测试作为例子,其中输入是用户名,输出是用户密码:

 

 

测试类:

 

//HibernateUserDAOTest.java

public class HibernateUserDAOTest extends AbstractTransactionalDataSourceSpringContextTests

{

    ApplicationContext applicationContext;

    HibernateUserDAO hub;

   

    @Override

    protected String[] getConfigLocations()

    {

       String[] config=new String[]{"file:D:""test""WebRoot""WEB-INF""classes""applicationContext.xml"};

       return config;

    }

   

    public ApplicationContext getContext(String[] filePath)

    {

 

       return new ClassPathXmlApplicationContext(filePath);

    }

   

      

    public void testConfig() {       

        assertNotNull("spring-mock context has bean init()",this.getConfigLocations());

    }

   

   

   

    @Test

    public final void testGetPasswordByName() throws BaseException

    {

       hub=(HibernateUserDAO)getContext(getConfigLocations()).getBean("hibernateUserDAO");

       assertEquals("234",hub.getPasswordByName("42"));

    }

   

    public static void main(String[] args)

    {

       TestRunner.run((Classextends TestCase>) HibernateUserDAO.class);}

posted on 2008-08-22 10:16  Thomson-Blog  阅读(844)  评论(0)    收藏  举报