Я хочу проверить статический метод A, который вызывает другой статический метод B в том же классе. Как я могу макетировать метод B?Как издеваться над статическим методом, который вызывается другим статическим методом?
ответ
Если обе функции находятся в одном классе, то звоните просто без использования какого-либо объекта или имени класса. Если они находятся в разных функциях, то с помощью имени класса вы можете позвонить друг другу. Надеюсь, это вам поможет. :)
Дразнящий статические методы Краткое резюме
Use the @RunWith(PowerMockRunner.class) annotation at the class-level of the test case.
Use the @PrepareForTest(ClassThatContainsStaticMethod.class) annotation at the class-level of the test case.
Use PowerMock.mockStatic(ClassThatContainsStaticMethod.class) to mock all methods of this class.
Use PowerMock.replay(ClassThatContainsStaticMethod.class) to change the class to replay mode.
Use PowerMock.verify(ClassThatContainsStaticMethod.class) to change the class to verify mode.
Пример Дразнящий статический метод PowerMock требует использования метода «mockStatic» в PowerMock. Скажем, у вас есть класс, ServiceRegistrator с методом под названием registerService, который выглядит следующим образом:
public long registerService(Object service) {
final long id = IdGenerator.generateNewId();
serviceRegistrations.put(id, service);
return id;
}
Достопримечательность здесь статический метод вызов IdGenerator.generateNewId(), которую мы хотели бы насмехаться. IdGenerator - это вспомогательный класс, который просто генерирует новый идентификатор службы. Это выглядит следующим образом:
public class IdGenerator {
/**
* @return A new ID based on the current time.
*/
public static long generateNewId() {
return System.currentTimeMillis();
}
}
С PowerMock это можно ожидать вызов IdGenerator.generateNewId() так же, как вы бы с любым другим способом, используя EasyMock однажды вы сказали PowerMock подготовить класс IdGenerator для тестирования. Вы делаете это, добавляя аннотацию к классу тестового примера. Это просто делается с помощью @PrepareForTest (IdGenerator.class). Вам также необходимо сообщить JUnit выполнить тест с использованием PowerMock, который выполняется с помощью @RunWith (PowerMockRunner.class). Без этих двух аннотаций тест не удастся.
Фактическое испытание, то на самом деле довольно просто:
@Test
public void testRegisterService() throws Exception {
long expectedId = 42;
// We create a new instance of test class under test as usually.
ServiceRegistartor tested = new ServiceRegistartor();
// This is the way to tell PowerMock to mock all static methods of a
// given class
mockStatic(IdGenerator.class);
/*
* The static method call to IdGenerator.generateNewId() expectation.
* This is why we need PowerMock.
*/
expect(IdGenerator.generateNewId()).andReturn(expectedId);
// Note how we replay the class, not the instance!
replay(IdGenerator.class);
long actualId = tested.registerService(new Object());
// Note how we verify the class, not the instance!
verify(IdGenerator.class);
// Assert that the ID is correct
assertEquals(expectedId, actualId);
}
Обратите внимание, что вы можете издеваться статические методы в классе, даже если класс является окончательным. Метод также может быть окончательным. Чтобы высмеять только определенные статические методы класса, обратитесь к частичной частичной части документации.
Oleksandr: Спасибо за ваш ответ. Если метод тестирован не является статическим методом, он работает. Но если метод является статическим методом и в классе IdGenerator, у вас будет проблемы. Как показано ниже: public класс IdGenerator { /** * @return новый идентификатор на основе текущего времени */ общественности статической долго generateNewId() { возврата System.currentTimeMillis();}. общественности статической долго registerService (обслуживание объекта) { final long id = IdGenerator.generateNewId(); //serviceRegistrations.put(id, service); return id; } } – Tommy
- 1. Как издеваться над приватным статическим методом в Java с помощью PowerMockito, который вызывается статическим инициализатором?
- 2. Как издеваться над статическим методом, который возвращает конечный класс?
- 3. Как издеваться над статическим методом с помощью junit и easymock
- 4. Как проверить андроид и издеваться над статическим методом
- 5. TDD: как издеваться над статическим методом в Java?
- 6. Как издеваться над статическим методом Crashlytics внутри брошенного исключения
- 7. Как издеваться над определенным статическим методом в классе java?
- 8. Как я могу издеваться над частным статическим методом с PowerMockito?
- 9. Не удалось издеваться над статическим методом с powermockito?
- 10. Как издеваться над методом, который вызывается другим методом с помощью EasyMock?
- 11. с TryParse статическим методом
- 12. Как мне издеваться над статическим свойством Groovy?
- 13. Как вы издеваетесь над статическим методом объекта домена в Grails?
- 14. Проблема со статическим рекурсивным методом
- 15. Работа со статическим методом Asp.Net
- 16. Помощь с статическим методом C++
- 17. java.lang.NoClassDefFoundError со статическим окончательным методом
- 18. python как издеваться над методом?
- 19. Низкоуровневая разница: нестатический класс со статическим методом против статического класса со статическим методом
- 20. Как издеваться над частным статическим внутренним классом?
- 21. Как объявить интерфейс со статическим методом?
- 22. Как бы вы назвали статическим методом?
- 23. Как узнать, какой класс называется статическим методом?
- 24. Как сделать Java Generic методом статическим?
- 25. Использование различных версий класса со статическим методом
- 26. В чем разница между методом расширения и статическим методом?
- 27. Как издеваться над методом e в журнале
- 28. Как я могу протестировать и издеваться над статическим методом расширения с Rhino Mocks?
- 29. Как издеваться над методом в PowerMock?
- 30. Как вызвать нестатический метод (который использует WebControl) со статическим методом?
У меня есть тест он с Mockito, EasyMock.expect, PowerMock.mockStatic, PowerMock.replay и PowerMockito. Но не работает. – Tommy
Если вы хотите издеваться над такими методами, я бы не использовал статические методы. Это предполагает, что вам следует пересмотреть свой дизайн, если вам нужно это сделать. –
Питер: Спасибо за ваш совет. Но я не могу изменить дизайн. :-( – Tommy