2012-09-19 18 views
10

私は単体テストの初心者です。 MyEclipseでTestNGを使用して、アプリケーションの単体テストを開発しています。それをやっている間、私はEasyMockのいくつかの問題に直面しています。ここで私のコードです(クラス名、メソッド名、戻り値の型はセキュリティ上の理由から変更されていますが、ここで達成しようとしていることを明確にしています)。EasyMockを使用したメソッドの例外のテスト

public MyClass 
    { 
     // This is a method in my class which calls a collaborator which I 
     // want to mock in my test case 
     public SomeObject findSomething(SomeOtherObject param) throws Exception 
     { 
      SomeOtherObject param a = myCollaborator.doSomething(param); 
      // Do something with the object and then return it 
      return a; 
     } 
    } 

ここに私のテストがあります。今私が実際にテストで達成したいのは、 ケースです。私の関数(findSomething)が正しくチェックされたいのですが、 は例外がスローされた場合に例外をスローします。将来、一部の 他の開発者は、メソッドのシグニチャを変更することができます(例外は、 メソッドシグネチャの一部ではありません)。スローを取り除きます 私のメソッドから例外。どうすれば誰も変わっていないことを確認できますか? ?

私は 間違ってやっている何を:私は "モックで最後に呼び出され 方法はのjava.lang.Exceptionをスローすることはできませんjava.lang.IllegalArgumentExceptionがを" 例外

を取得しています

@Test(dataProvider="mydataProvider", expectedExceptions=Exception.class) 
public void MyTest(SomeOtherObject param) throws Exception { 
{ 
    EasyMock.expect(myCollaboratorMock.doSomething(param)).andThrow(new Exception()); 
    EasyMock.replay(myCollaboratorMock); 
} 

ここに?誰かが私の特定のシナリオのためのテストを書く方法についていくつかの光を当てることができます ケース?

答えて

18

コラボレーターのdoSomething()メソッドは、Exceptionをスローする可能性があると宣言しておらず、そのモックにスローするように指示しています。不可能です。

例外はチェック例外です。メソッドシグネチャで宣言されている場合にのみスローされます。メソッドにthrows句がない場合は、ランタイム例外(つまり、RuntimeExceptionまたは任意の子孫クラス)がスローされます。

+0

False。 [generic quirks](http://java.dzone.com/articles/throwing-undeclared-checked)を使用することで、チェックされた例外をほぼどこからでも投げることができます。 – jontejj

関連する問題