2017-02-28 10 views
-1

EasyMockのandReturnメソッドを使用して同じ値を返すかどうかをチェックします。残念ながら、"java.lang.IllegalStateException:前のメソッドコールの動作定義がありません: "EasyMockを使用すると、EasyMockでテストすることができないと思いますが、メソッドを試してみると良いでしょう。easyMockで静的関数をテストすることは可能ですか?

よろしく アルパース

Menu menu = EasyMock.createMock(Menu.class) 
menu.setName("name"); 
     EasyMock.expect(XmlParseUtility.createLinesToParse(menu).toString()).andReturn(angularLines.toString()); 

エラーメッセージ:

java.lang.IllegalStateException: missing behavior definition for the preceding  method call: 
    Menu.getName() 
    Usage is: expect(a.foo()).andXXX() 
+0

これは誤りではありません。 EasyMockはあなたがそれについて話していないメソッド呼び出しを検出しました。どのように動作するので、それが起こると例外が発生します。 2つの解決方法があります。1.呼び出されると予想されるすべてのメソッドをライブラリに伝えます。 2.予期しないメソッド呼び出しを可能にする模擬ライブラリに切り替えます。 –

+0

"EasyMock.expect(menu.getName())。equals(" name ");"を意味する場合、私はすでにそれを行いました。ライブラリProkhorovを嘲笑することに切り替えるとどういう意味ですか?あなたは私に例を挙げることができますか? – user2307786

+0

私は別の模倣ライブラリがすべてであることを意味しました。たとえば、MockitoやSpockなどです。 EasyMockは "厳密な"模倣ライブラリであり、模擬テストで呼び出されるすべてのメソッドを提供します。これは、あなたがテストしようとしなかった無意味なものでテストを希釈するかもしれません(実際の効果は場合によって変更されますが、時にはこの厳密性が必要な場合もあります)。 Mockitoは "寛大な"模倣ライブラリであり、予期しないメソッド呼び出しを無視します。 –

答えて

0

は、私はあなたがやりたいことはよく分からないトンのいずれかをコメントします。彼はコメントします、EasyMockは厳密ではありません。それはあなたが欲しいものです。

モキトスタイルのモックが必要な場合は、niceMockを使用します。

次に、あなたのコードについてです。 setNameへの電話を録音したいと思っています。そして、XmlParseUtility.createLinesToParseが期待どおりに機能していることを確認します。私が正しい場合は、このコードをしたい:

Menu menu = EasyMock.createNiceMock(Menu.class); // unrecorded methods will return null 
menu.setName("name"); // recording a call to setName 
replay(menu); // done with recording, going in replaying 
assertEquals(angularLines.toString(), XmlParseUtility.createLinesToParse(menu).toString()); 
verify(menu); // if you want to make sure setName was called 
0

あなたが実際に静的XmlParseUtility.createLinesToParse()メソッド呼び出しをスタブしようとしている場合は、PowerMockライブラリはあなたが探しているものです。

// instantiate angularLines and menu 

PowerMock.mockStatic(XmlParseUtility.class); 
EasyMock.expect(XmlParseUtility.createLinesToParse(menu)).andReturn(angularLines); 
PowerMock.replay(XmlParseUtility.class); 

// invoke test subject 

PowerMock.verify(XmlParseUtility.class); 

PowerMockは、テストが彼らのランナーを使用して実行されている必要がありますし、静的メソッドを含むクラスは、「準備」すること。詳細については、それらをチェックしてくださいdocumentation

関連する問題