当前位置: 首页 > 知识库问答 >
问题:

arquillian测试中没有PowerMock的模拟类

高博涉
2023-03-14

我想现在,如果有可能模仿一个类一样

public class MyClass{
   ...
}

我们的业务逻辑在代码中的某个地方用< code>new myClass()创建了这个对象,因此我不能访问创建的对象来模拟这些方法。有没有办法替换整个类或者覆盖那些方法。我正在使用mockito,我只找到了这样做的例子

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

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

欢迎任何建议。

共有2个答案

宿建本
2023-03-14

我找到了一个可行的方法来达到我的要求。

我将MyClass转换为bean,只需添加注释< code>@Dependent。

@Dependent
public class MyClass{
   public Integer someMethod(){
       return 100;
   }
}

我在业务逻辑中使用MyClass

public class BusinessClass{
    @Inject
    MyClass myClass

    public Integer doSomething(){
        return myClass.someMethod();
    }
}

更改之后,我可以在测试中用注释< code > @ specialties 模拟这个类

@Specializes
@Dependent
public class MyClassMock extends MyClass
{
    @Override
    public Integer someMethod(){
        return 23; // return my mocked value
    }
}

MyClass将在测试环境中自动替换为MyClassMock。

艾自强
2023-03-14

对不起,我只看到两个硬核解决方案:

使Powermock工作通过使用PowerMockrul和PowerMock规则代理:获取jav辅助找不到与PowerMock和PowerRul在Junit与Mockito

或者

使用Java反射将模拟对象设置为MyClass:Java是否可以通过反射访问私有字段

 类似资料:
  • 我正在尝试测试下一种方法: 称为PrivateMethod: asyncTask的执行无法在Mockito的测试中完成,所以我需要以某种方式模拟它。我试着用PowerMock来嘲弄私有方法: 这在PowerMockito行(NullPointerException)中给了我一个异常,它说 方法引发了“org.mockito.exceptions.Misusing.UnfinishedStubbin

  • 我正在使用PowerMock测试中断异常情况下的错误处理。不幸的是,这些测试有时似乎对其他测试类有一些副作用:我在一个测试类中配置的模拟似乎在另一个测试类中仍然存在。为了产生副作用,我将下面的示例简化为基本行。 让我们假设我们有一个类要测试: 以及一个使用PowerMock测试私有方法的测试类: 当我现在创建另一个测试类(在第一个测试类之后执行)时,如下所示: 我立即得到以下异常: 如果我在第一节

  • 问题内容: 如何模拟使用PowerMock进行测试的专用方法?我有一个类,我想使用一个调用私有方法的公共方法进行测试。我想假设私有方法可以正常工作。例如,我想要类似的东西。我发现有使用PowerMock的解决方案,但该解决方案对我不起作用。怎么做?有人有这个问题吗? 问题答案: 我在这里没有问题。使用Mockito API的以下代码,我做到了: 这是JUnit测试:

  • 下面是从测试中的类调用的类的代码示例 所以我的问题是如何成功地模拟CodeWithAnotherPrivateMethod类的doTheGamble()方法,使其始终返回true?

  • 我在试着采纳协议。我了解消费者方面的等式,它看起来非常好。但我对制作人方面感到困惑。 文档似乎提倡运行提供者应用程序,并根据正在运行的服务器验证合同。 我怎样才能用Pact实现这一点呢?