2

私は次のコードを持っています

@PrepareForTest({Mongo.class, XYMongo.class, DB.class})
public class XYMongoTest extends UnitTest{

String host = Play.configuration.getProperty("mongo.host");
int port = Integer.parseInt(Play.configuration.getProperty("mongo.port"));  
String name = Play.configuration.getProperty("mongo.name");

@Test
public void testRetrieveMongoDBSuccessful() throws UnknownHostException, MongoException, Exception
{
    Mongo mongoMock = mock(Mongo.class);
    DB mockDB = mock(DB.class);

    PowerMockito.whenNew(Mongo.class).withArguments(host, port).thenReturn(mongoMock);

    when(mongoMock.getDB(name)).thenReturn(mockDB);

    XYMongo.getMongoDB();

    verify(mongoMock.getDB(name));
}


@Test
public void testRetrieveMongoDBFailUnkownHost() throws Exception
{   
    try
    {

        PowerMockito.mockStatic(Mongo.class);

        PowerMockito.whenNew(Mongo.class).withArguments(host, port).thenThrow(new UnknownHostException("Test Exception"));

        XYMongo.getMongoDB();

        PowerMockito.verifyNew(Mongo.class).withArguments(host, port);
    }
    catch (Exception e) 
    {
        assertEquals("Test Exception", e.getMessage());
    }
}}

最初のテストは正常に合格し、2番目のテストは失敗してテストエラーが発生します

失敗、予想:<[テスト例外]>が:<[ここにverify(mock)のメソッド呼び出しがありません:-> org.powermock.api.mockito.internal.invocationcontrol.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)正しい検証の例:verify(mock).doSomething()また、final / private / equals()/ hashCode()メソッドのいずれかを検証すると、このエラーが表示される場合があります。これらのメソッドをスタブ/検証することはできません。]>

これを修正する方法について何かアイデアはありますか?私が考えることができるすべてを試しました。

ありがとう

ポール

4

1 に答える 1

3

testRetrieveMongoDBSuccessful()エラーは実際には;から発生しています。あなたはverify()かなり正しくないように見えますが、Mockitoは次にあなたがそれと対話するまであなたにそれを伝えることができません。

の最後の行を次のように置き換えてみてくださいtestRetrieveMongoDBSuccessful()

verify(mongoMock).getDB("name");

于 2011-09-28T02:47:14.917 に答える