Java异常处理概念

时间:2016-04-23 21:04:18

标签: java c# exception-handling

如果我必须处理并测试一个调用另一个处理异常的类的类的异常,我会感到困惑。

以下是我班级的基本解释:

A类 - >有一个方法并调用抛出异常的方法。使用try和catch

处理异常

B类 - >从类A调用该方法。它现在不会抛出任何异常,因为在类A中处理了异常。

我想知道是否必须添加throws并显示在B类中抛出异常?另外,我是否需要单元测试B类中调用的方法抛出异常?当我试图这样做时,测试用例失败了。

以下是处理异常的A类:

public String getFooData(Foo foo, String foo1, String foo2) {
    String foodata = "";
    try {
        FooRequest request = foo.setFoo1(foo1).setFoo2(foo2).buildQueryMessage();
        foodata = request.getFooData();
    } catch (SystemException e) {
        errorReporter.report(".SystemException", e);
    }
}

这是我的B班:

public String getFoo(String foo2) {
    RequestBuilder requestBuilder = Request.Provider(ProviderType.foo);
    String foodata = instanceOfA.getFooData(foo, foo1, foo2);
    return foodata;
}

1 个答案:

答案 0 :(得分:1)

  

我想知道是否必须添加throws并显示在B类中抛出异常?

如果您的意思是:

geometricDistance(5,6);
然后答案是否定的。您不必声明该方法会抛出public String getfoo(String foo2) throws SystemException { ... } ,因为它不会。它在SystemException中抛出/处理,并且不会传播到Class A。但是,您是否未在Class B中处理异常,如果Class AClass A,则必须在Checked Exception的方法签名中指定您的例外。然后您可以选择在Class B中处理它或进一步传播它。还需要指定Class B抛出已检查的异常,或者在Runtime Exception中包装并抛出它而不在方法签名中声明它。

public String getfoodata(Foo foo, String foo1, String foo2) throws SystemException { ... }
  

另外,我是否需要对B类中调用的方法抛出异常进行单元测试?

Class B不会抛出异常。它被抛入Class A并在那里处理。