This guide детали насмешливый вызов конструктора с помощью PowerMock:
... Но PowerMock вам не придется менять код, вместо этого вы можете поручить PowerMock перехватить вызов нового файла (. .) и вместо этого верните макет. Для этого мы начнем с создания издеваться типа File.class как обычно:
File fileMock = createMock(File.class);
Ожидать вызов нового файла мы просто делаем:
expectNew(File.class, "directoryPath").andReturn(fileMock);
Так что в вашем случае, вы должны иметь это в вашем тест случае или настройки метода:
MyObject mockOb = createMock(MyObject.class);
expectNew(MyObject.class).andReturn(mockOb);
добавив эти, вы будете иметь следующее поведение:
Всякий раз, когда есть new MyObject()
в , ваш код, запущенный тестовым чеком, будет возвращен экземпляр объекта, издевавшийся над PowerMock. Так что неважно , где в вашем коде вы создаете новый экземпляр MyObject
, он будет тем же самым, который создается функцией createMock()
.
EDIT
позволяет брать пример
Class A {
private void method1()
{
Obj obj = new Obj();
obj.setX(10);
}
//Here I want to access the obj object to verify the values
}
Для достижения этой цели, вы должны думать немного по-другому.
- создать реальный Экземпляр
- создать насмешливый для Obj конструктора
- запуска вашей логики, которая запускает проверку
pruivate method1()
- значения на издевались например Obj
- если значения не проверяются (что-то модифицирует его в логике), zou может проверить, вызвал ли setX() соответствующие времена.
Что-то вдоль этих линий:
@Test
public void testMyPrivateMethod() {
//1. object with the logic to test
A a = new A();
//2. set up mocking
Obj mockObj = createMock(Obj.class);
expectNew(Obj.class).andReturn(mockObj);
//3. trigger logic to test
a.someOtherMethodThatCallsMethod1();
//4. test Obj (find out if setX() has been called or not)
verify(mockObj).setX(any(Integer.class));
}
Я не уверен, но я помню, как способ поиздеваться вызов конструктора каким-то образом, и заставить его вернуться фиктивный объект, который может быть проверяется после этого – ppeterka
Вы можете предоставить некоторые рекомендации о том, что вы пытаетесь выполнить. Поскольку мне кажется, что вы не используете правильный подход, если хотите проверить внутренние поля частного метода. – benzonico
@ppeterka: Я не хочу изменять код – user2181531