在junit测试中跳过一行

pro*_*mer 2 junit

我正在为一种方法编写 junit 测试用例。这样做时,在调用另一个 void 方法的行中存在异常。因此,下一行受到影响。我想跳过这一行并继续执行。任何人都请建议我解决方案。

helperObject.methodCall(session);//Exception occurred inside this mthd
httpResponse = buildSuccessResponse(ccId);
Run Code Online (Sandbox Code Playgroud)

因此,无论第一行发生什么异常,我都希望执行第二行。(由于异常,我无法获得代码覆盖率)。

Gho*_*ica 5

似乎您不了解单元测试的概念:这个想法是,您完全执行一个方法。意思是:您永远不希望您的测试只调用您稍后将发送给客户的确切“生产”代码。测试特定于测试的代码没有意义。您始终测试将在客户处运行的代码!

因此:如果您认为测试用例需要“排除”“被测代码”的某些部分;那么不:你不这样做。

相反,您了解该异常的来源,然后您决定该异常是否表明您的生产代码中存在错误;或者如果该异常意味着您的单元测试需要做一些更多的设置工作。

例子:

class ProductionThingy {
    private DataBaseWhatever whatever;

    int foo() {
       whatever.doSomething();
       return computeSomethingElse();
    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

class ProductionThingyTest {

@Test
public void testFoo() {
  ProductionThingy underTest = new ...
  assertThat(underTest.foo(), is(some expected value))
Run Code Online (Sandbox Code Playgroud)

所以,如果你现在想测试这个 foo() 方法......并且测试因为 NullPointerException 而失败(因为该字段是空的)那么解决方案不是神奇地排除该 call whatever.doSomething()

你要做的是确保你的 ProductionThingy underTest对象在“whatever”中确实有一个非空值;例如使用依赖注入来提供DataBaseWhatever的模拟实例。

  • @程序员 不客气。任何状况之下; 我建议您从众多在线教程中的一个(或多个)学习“编写单元测试”。很难通过“只是尝试”来进入单元测试;并使用来自不同搜索词的谷歌结果的独立信息……完成一个“完整”教程会更容易,它会以一致的方式引导您完成单元测试的各个方面。 (2认同)