Вы «не можете сделать это, используя макет», потому что ваш класс плохо спроектирован. В качестве обходного пути вы можете использовать PowerMock (как предложено @ S.K.), Чтобы высмеивать статическое поле, но это только подавит реальную проблему вашего класса.
Лучше воспользуйтесь возможностью и улучшите код для лучшей тестируемости и развития:
Шаг 1. Создайте интерфейс для вашего класса UserBO
и дайте ему реализовать его.
public interface UserService {
void callSomeFunction();
void callSomeOtherFunction();
}
public class UserBO implements UserService { ... }
Шаг 2: Измените ваш класс ManageUser
, чтобы получить любую реализацию UserService
через конструктор.
public class ManageUser {
private final UserService userService;
public ManageUser(UserService userService) {
this.userService = userService;
}
public String method1() {
userService.callSomeFunction();
userService.callSomeOtherFunction();
}
}
Шаг 3: Измените сторону вызова вашего класса ManageUser
, чтобы обеспечить UserService
.
Так что вместо
ManageUser manager = new ManageUser();
использование
ManageUser manager = new ManageUser(new UserBO());
Шаг 4: Теперь вы можете легко смоделировать UserService
в своем тесте и построить ManageUser
с помощью макета.
Эта конструкция также позволяет платформам DI (например, Spring) вводить (или autowire ) компонентов.