我用的是旧版本的junit,写出来楼主看看有没有帮助吧用try-catch包起来
try{
   i = i / 0;
   fail();
}catch(XXXException e){
  // do sth.
  
}也就是如果除法正常执行下去,就说明出错了,fail()也是保险,很明显走不到这里。
如果走到catch里面,就说明正常,就通过。
(正常系的测试应该是fail放在catch里面)good luck

解决方案 »

  1.   

    楼上的朋友用的是JUnit3吧,这种方法确实可行,不过现在都比较推荐用JUnit4,利用JDK5的Annotation机制使得Junit使用起来更直观。我主要想问的还是JUnit4的解决方案,因为现在要用到JUnit4,呵呵!
      

  2.   

    落后了,落后了,见笑见笑。哈哈不过又看了一遍楼主的问题,
    感觉楼主想问的内容和junit没什么关系。从结构上讲,
    实现代码不会也不可能出现在测试代码里,
    所以楼主这个例子把我带到沟里了。呵呵洗个澡继续说,楼主所想问的和测试和测试手段没有关系,
    应该是一个整体的结构,
    按照你的要求,例如关闭资源等等,
    应该是被测试的代码里实现的,
    例如这样的代码:
    (用英文代替代码)
    public void a(int i){
      open a connection
      try{
        x = 10 / i;
      }catch(Exception e){
        do sth. or throw exception
      }finally{
        close connection.
      }
    }这样再测试这个a方法的时候,就不涉及到楼主所说的“执行不了after...”的问题了。
    出错就正确了,然后善后的事情也会被a处理
    (也不应该是楼主想的让测试代码处理)
    (再来个括号,dbunit这种的不算让测试代码处理,因为它处理的也是一个测试环境,一个桃花源罢了)
    有了exception就应该执行不到下一句了的。
    出错了再执行,那不更错了。呵呵楼主把视点再往高处看一下就应该OK了good luck
      

  3.   

        楼上的朋友说的确实很有道理,其实我想问的是测试手段的问题,对于关闭资源的确是应该放到被测试代码中完成, 我举关闭资源这个例子在这儿很不恰当。
        由于在测试中我们可能会期望出现某个异常(不出现这个异常反而不对),但是在出现异常后我们又想执行后面的动作,就像我的例子中出现期望的除0异常,又想继续执行后面的System.out.println("after exception")语句一样。我就是想问怎样达到这个目的(用JUnit4)。
        当然,我并没有认为楼上的朋友用JUnit以前的版本就落后的意思,请见谅。只不过我们的项目要求用JUnit4.呵呵!
      

  4.   

    我又来啦,哈哈大概明白楼主的意思了,
    楼主是不是想测试完了一个Exception再继续测试之后的代码?不过根据单元测试的思想,
    也就是“每个测试点应该是各自独立的”(大概是这个意思吧),如果按照楼主的想法,
    一个测试方法之中要测试一个exception,
    然后又想执行后面的动作(或者说是想继续测试之后的逻辑)这样应该不太好吧?!例如看easymock的例子,
    里面测试Exception的时候,也是调用xxx.andThrow() 
    然后就verify了(好像拼错了吧?理解精神喽)
    就是体现了“一个测试点一个测试”也就是说,
    Exception应该是一个测试点,
    “之后的操作”应该是另一个测试点,
    如果写方法的话,应该有2个,
    大概是这个样子:
    public void testANormal(){} <-专门测试“没有Exception”的“之后”的代码
    public void testAException(){} <-专门测试Exception又占了一层楼,不好意思啦good luck
      

  5.   

    谢谢villagehead为我这么耐心的讲解,让我学到了更好的测试方法,的确我没理解到单元测试的思想,习惯性的把所有操作都放在一个模块内完成,这也是我也代码低效的原因,呵呵!想改,但总是要犯老毛病,这次也是。
    以后确实应该把视点往高处看一下,这样就不会老去钻牛角尖了!