我现在想,如果可以模拟像
这样的类public class MyClass{
...
}
我们的业务逻辑在代码中的某处用new myClass()
创建此对象,因此我无权访问创建的对象来模拟这些方法。有没有办法替换整个类或覆盖这些方法。我正在使用 mockito ,我只找到了像
@Test
public void myTest{
MyClass myClass = Mockito.mock(MyClass.class);
Mockito.when(myClass.myMethod()).thenReturn("hello World");
...
}
我们无法使用PowerMock,因为它与我们的测试环境不兼容。
欢迎任何建议。
答案 0 :(得分:0)
对不起,我只看到两个核心解决方案:
使用PowerMockRule和PowerMock Rule Agent使Powermock正常工作: Getting javassist not found with PowerMock and PowerRule in Junit with Mockito
或
使用Java Reflection将模拟对象设置为MyClass:Is it possible in Java to access private fields via reflection
答案 1 :(得分:0)
我找到了一种可行的方式来实现我的要求。
我将 MyClass 转换为bean,只需添加注释@Dependent
。
@Dependent
public class MyClass{
public Integer someMethod(){
return 100;
}
}
我在商业逻辑中使用 MyClass
public class BusinessClass{
@Inject
MyClass myClass
public Integer doSomething(){
return myClass.someMethod();
}
}
在此更改之后,我可以使用注释@Specializes
@Specializes
@Dependent
public class MyClassMock extends MyClass
{
@Override
public Integer someMethod(){
return 23; // return my mocked value
}
}
MyClass 将自动替换为testenvironment中的 MyClassMock 。