如何在 java 中注释 class 的 injectmocks 下模拟私有方法
how to mock a private method under a injectmocks annotated class in java
我在注入的模拟注解 class 中遇到了关于模拟私有方法的问题。我的代码如下
public class foo {
@Autowired
fooBean fooBean;
public void method1() {
this.method2();
}
private void method2() {
fooBean.someMethod();
system.out.println("Hello world");
}
}
当我使用 powermockito 创建 UT class 时,foo class 应该是 @injectMocks,因为 fooBean 应该作为 mock class 注入。但是当 foo class 被标记为 @injectMocks 时,它不能使用像“doReturn("xxx").when(foo,"method2")" 来模拟它的私有方法,它会引发关于这个的错误不适用于 injectMocks。
被屏蔽了。不知道如何继续。
TLDR;您不能使用 InjectMocks 模拟私有方法。
您应该模拟实现细节并关注应用程序的预期行为。同样重要的是,私有方法不在您的 java 项目中执行核心测试逻辑。
专注于编写函数,以便测试不受私有方法的阻碍。如果不可能,值得一问的是,私有方法的作用是什么对您的功能如此有价值,以及为什么它必须是私有的。
还有其他方法可以测试私有方法 - 您可以使用 Reflections java library,这可以让您在运行时停止方法并向其中注入特定值。但是,同样,这是在寻找一个不需要存在的问题的解决方案。
我在注入的模拟注解 class 中遇到了关于模拟私有方法的问题。我的代码如下
public class foo {
@Autowired
fooBean fooBean;
public void method1() {
this.method2();
}
private void method2() {
fooBean.someMethod();
system.out.println("Hello world");
}
}
当我使用 powermockito 创建 UT class 时,foo class 应该是 @injectMocks,因为 fooBean 应该作为 mock class 注入。但是当 foo class 被标记为 @injectMocks 时,它不能使用像“doReturn("xxx").when(foo,"method2")" 来模拟它的私有方法,它会引发关于这个的错误不适用于 injectMocks。
被屏蔽了。不知道如何继续。
TLDR;您不能使用 InjectMocks 模拟私有方法。
您应该模拟实现细节并关注应用程序的预期行为。同样重要的是,私有方法不在您的 java 项目中执行核心测试逻辑。
专注于编写函数,以便测试不受私有方法的阻碍。如果不可能,值得一问的是,私有方法的作用是什么对您的功能如此有价值,以及为什么它必须是私有的。
还有其他方法可以测试私有方法 - 您可以使用 Reflections java library,这可以让您在运行时停止方法并向其中注入特定值。但是,同样,这是在寻找一个不需要存在的问题的解决方案。