我正在为一个方法编写junit测试用例。在这样做时,行中有一个异常,它调用另一个void方法。因此,下一行受到影响。我想跳过这一行并继续执行。任何人请建议我解决方案。
helperObject.methodCall(session);//Exception occurred inside this mthd
httpResponse = buildSuccessResponse(ccId);
因此,无论第一行发生什么异常,我都希望执行第二行。(因为异常,我得到了代码覆盖率)。
答案 0 :(得分:3)
您似乎不了解单元测试的概念:您的想法是,您完全执行一个方法。含义:你永远不会希望你的测试确实可以调用任何东西,除了确切的"生产"您稍后将发送给客户的代码。测试特定于测试的代码没有任何意义。您总是测试将在客户处运行的代码!
因此:如果您认为需要"排除"您正在测试的代码的某些部分&#34 ;;然后不:你不这样做。
相反,您了解该异常的来源,然后您决定该异常是否表示生产代码中存在错误;或者,如果该异常意味着您的单元测试需要进行更多的设置工作。
示例:
class ProductionThingy {
private DataBaseWhatever whatever;
int foo() {
whatever.doSomething();
return computeSomethingElse();
}
}
测试:
class ProductionThingyTest {
@Test
public void testFoo() {
ProductionThingy underTest = new ...
assertThat(underTest.foo(), is(some expected value))
所以,如果你现在想要测试这个foo()方法......并且由于例如NullPointerException测试失败(因为该字段为null)那么解决方案是不到神奇地排除了那个电话whatever.doSomething()
。
您要做的是确保您的ProductionThingy underTest 对象确实在"中包含非空值;等等#34 ;;例如,使用依赖注入以提供DataBaseWhatever的模拟实例。