2016-04-23 17 views
0

例外を処理する別のクラスを呼び出すクラスの例外を処理してテストする必要がある場合、私は混乱しました。ここでJava例外処理の概念

は私のクラスのための基本的な説明です:

クラスA - >は、メソッドを持っており、例外をスローするメソッドを呼び出します。 >例外は私が私かどうかを知りたいと思ったクラスA

で取り扱われるようそれは今どんな例外をスローしないクラスAからメソッドを呼び出し - 例外はtryおよびcatch

クラスBを使用して処理されますスローを追加して、例外がクラスBでスローされたことを示す必要がありますか?また、クラスBで呼び出されたメソッドが例外をスローするというUnitテストを行う必要がありますか?私がそれを試みたとき、テストケースは失敗しました。ここで

は、例外を処理するクラス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

私は追加する必要がある場合は例外というスローと示し知りたいと思いましたクラスBでスローされますか?

次の意味場合:

public String getfoo(String foo2) throws SystemException { ... } 

をその後、答えはノーです。メソッドはSystemExceptionをスローすると宣言する必要はありません。それはClass Aでスロー/ハンドリングされ、Class Bに伝播されません。ただし、Class Aの例外を処理していない場合は、Checked Exceptionの場合は、Class Aのメソッドシグネチャで例外を指定する必要があります。次に、それをClass Bで処理するか、それをさらに伝播するかを選択できます。また、Class Bがチェック例外をスローするか、またはRuntime Exceptionにラップしてメソッドシグネチャに宣言することなくスローするように指定する必要もあります。

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

また、私は、クラスBに呼び出されたメソッドが例外をスローすることをユニットテストする必要がありますか?

Class Bは例外をスローしません。それはClass Aに投げ込まれ、その上で処理されます。

+0

awesome ....明確にしてくれてありがとう... – Jasmine

+0

@ジャスミンの問題はありません!あなたの質問に完全に回答した場合は、「解決済みのマークを付ける」ことを忘れないでください(上/下の緑色のチェック)。 – Jaims