Как заставить Mockito и Powermock правильно выбросить ошибку - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть следующий код

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

Первый тест проходит нормально, а второй завершается неудачно с ошибкой теста

Ожидается сбой: <[Исключение теста]>, но было:<[Отсутствует вызов метода для verify (mock) здесь: -> в org.powermock.api.mockito.internal.invocationcontrol.MockitoNewInvocationControl.expectSubstitutionLogic (MockitoNewInvocationControl.java:65) Пример правильной проверки: verify (mock )doКроме того, эта ошибка может появляться, потому что вы проверяете любой из методов: final / private / equals () / hashCode ().Эти методы не могут быть проверены / проверены.]>

Есть идеи как это исправить?Перепробовал все, что мог придумать.

Спасибо

Пол

1 Ответ

3 голосов
/ 28 сентября 2011

Ошибка на самом деле исходит от testRetrieveMongoDBSuccessful(); Похоже, что у вас verify() не совсем верно, но Мокито не может сказать вам , что до следующего времени вы не будете взаимодействовать с ним.

Попробуйте заменить последнюю строку testRetrieveMongoDBSuccessful() на:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...