Накарайте Mockito и Powermock да хвърлят грешка правилно

Имам следния код

@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());
    }
}}

Първият тест преминава добре, а вторият се проваля с тестова грешка

Неуспех, очакван:‹[Test Exception]> но беше:‹[ Липсващо извикване на метод за verify(mock) тук: -> в org.powermock.api.mockito.internal.invocationcontrol.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65) Пример за правилна проверка: verify(mock).doSomething() Освен това тази грешка може да се появи, защото сте проверили някой от методите: final/private/equals()/hashCode(). Тези методи не могат да бъдат заглушени/проверени. ]>

Някакви идеи как да поправя това? Опитах всичко, за което се сетя.

Благодаря

Пол


person pbattisson    schedule 27.09.2011    source източник


Отговори (1)


Грешката всъщност идва от testRetrieveMongoDBSuccessful(); изглежда, че имате verify() не съвсем правилно, но Mockito не може да каже това до следващия път, когато взаимодействате с него.

Опитайте да замените последния ред на testRetrieveMongoDBSuccessful() с:

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

person millhouse    schedule 28.09.2011