13

私はユニットテストの初心者です。MyEclipseでTestNGを使用して、アプリケーションの単体テストケースを開発しています。それをしている間、私は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)が適切に例外をスローすることを確認したいということです。将来、他の開発者がメソッドのシグネチャを変更して(throws Exceptionは実際にはメソッドシグネチャの一部ではありません)、throwsExceptionをメソッドから削除することができます。では、どうすれば誰もそれを変更しないようにすることができますか?

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

例外が発生しています

"java.lang.IllegalArgumentException:モックで最後に呼び出されたメソッドはjava.lang.Exceptionをスローできません"

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

4

1 に答える 1

24

共同作業者のdoSomething()メソッドは、例外をスローする可能性があることを宣言していません。モックに例外をスローするように指示しています。不可能です。

例外はチェック例外です。メソッド シグネチャで宣言されている場合にのみスローできます。メソッドにthrows句がない場合、できることは実行時例外 (つまりRuntimeException、または任意の子孫クラス) をスローすることだけです。

于 2012-09-23T07:07:32.620 に答える