正在测试的方法调用私有虚方法,我也希望在我的测试中包含

时间:2018-02-01 23:04:58

标签: java exception junit junit4

我想要用来测试异常的JUnit。它是这样的:

@Test
public void test1() throws Exception {
  boolean testPass;
  try {
    method1();
    testPass = true;
    Assert.assertTrue(testPass);
  }
  catch(Exception e) {
    testPass = false;
    Assert.assertTrue(testPass);
  }
  System.out.println("End of test2 Junit");
}

method1()是这样的:

public void method1() throws Exception {
  try {
    do something....
    method2();
  } catch (Exception e) {
    throw e;
  } finally {
   do some more...
  }
}

对于我想要的,只考虑method1().我的问题是method2()我的问题是method1()private void method2() throws Exception { if (confition is not met) { do something... throw new Exception(); } else { do something else; } } 调用并且也可以抛出异常。它是这样的:

method1()

method2()可能不会抛出任何异常,但private void会抛出异常。我喜欢我的测试以检查其中任何一个例外,但我不确定如何将method2()纳入我的测试中,特别是因为它是#!/bin/bash find /home -type f -name "wp-config.php" -print0 | while read -rd $'\x00' f do cat '[%s]\n' "$f" | grep DB_NAME done 方法。可以这样做,如果是这样,怎么办?

1 个答案:

答案 0 :(得分:1)

根据您的代码,只有在以下情况下才能实现真正的条件:   if(条件不满足){     做一点事...     抛出新的异常();   } else {     做别的事;   } 如果由于某些原因你无法在单元测试中准备这样的条件(比如需要互联网连接),你可以将条件检查提取到新方法中:   if(isNotCondition()){     做一点事...     抛出新的异常(); 在测试类中,您重写新方法并返回所需内容: MyService myService = new MyService(){     @覆盖     boolean isNotCondition(){         返回true;     } } 这是测试特殊情况的更紧凑的方法: @规则 public ExpectedException thrown = ExpectedException.none(); @测试 public void testMethod1WhenMethod2ThrowsException()throws Exception {     thrown.expect(Exception.class);     thrown.expectMessage("预期的异常消息");     myServive.method1(); }