在arquillian测试中没有PowerMock的模拟类

时间:2016-05-20 12:44:26

标签: java mockito jboss-arquillian

我现在想,如果可以模拟像

这样的类
public class MyClass{
   ...
}

我们的业务逻辑在代码中的某处用new myClass()创建此对象,因此我无权访问创建的对象来模拟这些方法。有没有办法替换整个类或覆盖这些方法。我正在使用 mockito ,我只找到了像

这样的例子
@Test
public void myTest{
    MyClass myClass = Mockito.mock(MyClass.class);
    Mockito.when(myClass.myMethod()).thenReturn("hello World");
    ...
}

我们无法使用PowerMock,因为它与我们的测试环境不兼容。

欢迎任何建议。

2 个答案:

答案 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