在JUnit中每个test case里至少要有一个assert语句这一点没有问题。但是在准备test case需要的文件时,例如在setBeforeClass()方法里复制文件,如果要复制的文件不存在或者复制出错,就要抛出异常,让case停掉不能继续跑。
这个时候,在setBeforeClass里使用assertTrue合理吗?
或者还是自己去写一个与assertTrue完全一样功能的代码,判断复制是否成功,如果不成功就抛出异常。
也即是说,严格的控制assert语句只能在@Test方法中使用。我觉得没有必要,大家怎么看呢?!

解决方案 »

  1.   

    看情况,我理解你的意思是说只有在做测试检查逻辑的时候才使用assertTrue,其它的时候如数据初始化过程的时候不使用assertTrue(使用其它的进行区分)。如果只是规范上要求这样我觉得没有必要了。如果是你想在正常的检查逻辑中进行功能的扩展,就可以进行区分。比如,统计检查的数量,修改丰富错误信息格式,写入其它日志等。
      

  2.   

    单元测试的测试文件或者数据库的话,最好使用 Mock 工具来做,也就是假的,比如用 EasyMock 模拟一下什么的。因为在 Unit Test 进行之前的错误而导致 UT 失败是不可容忍的,单元测试应尽量避免这种情况的发生,像在执行单元测试用例之前还需要准备一大堆的文件、数据表数据之类的。
      

  3.   

    在setBeforeClass里面assert确实有点奇怪
      

  4.   

    嗯,问题是现在要做的话,其实就是自己写一个与assertTrue完全一样的代码,即是说,把原来程序中assertTure换成自己写的checkTrue,其他的没有任何区别了。
      

  5.   

    个人觉得在setBeforeClass里使用assertTrue不太合理
    准备工作没做好的话
    抛异常比较好,表示错误,case没有成功运行起来
    而不是case失败
      

  6.   

    背景:因为准备工作有很多步,很多都是别人写的:这些方法都是返回一个boolean,所以需要判断返回值再决定是否抛出异常