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

当试图在静态方法调用中模拟静态方法调用时,Powermock调用初始方法

昌博易
2023-03-14

Powermock为什么不模拟静态方法调用,而是在然后()语句中调用初始方法?

在这种情况下,我有一系列方法调用:

TestClass方法-调用-

Class4方法尝试查找上下文中不存在且挂起的对象,因此我尝试使用Powermock模拟公共静态Class3方法。

所有的类和方法都是非最终的。我使用TestNg。我的测试方法有一个@准备测试我尝试了以下方法来模拟方法调用:

PowerMockito.mockStatic(Class3.class);
when(Class3.callEvilMethod()).thenReturn("test");

或而不是当-然后返回:

doReturn("test").when(Class3.callEvilMethod());

doAnswer(new Answer() {methos that returns test"}).when(Class3.callEvilMethod());

PowerMockito.stub(PowerMockito.method(Class3.class, "callEvilMethod")).toReturn("test");

但是当我运行测试时,最初的类是3。CallevillMethod()在when语句中被调用。我不知道为什么。难道它不应该被嘲笑吗?

编辑:我调整了我的测试以向您展示它的样子:

@PrepareForTest( { Class1.class, Class2.class, Class3.class})
public class TestClass extends AbstractTest {

private Class1 class1;

@BeforeMethod
 public void setUp() throws Exception {              

class1 = new Class1() {
}

@Test
public void testMethod() throws Exception {

// Create various objects in Db, do other method calls, then:

PowerMockito.mockStatic(Class3.class);

// PowerMockito.suppress(PowerMockito.method(Class3.class, "evilMethod"));

// PowerMockito.when(Class3.EvilMethod()).thenReturn("test");

// doReturn("test").when(Class3.evilMethod());

// PowerMockito.stub(PowerMockito.method(Class3.class, "evilMethod")).toReturn("test");  

class1.callMethod();
    }
}

共有1个答案

濮阳驰
2023-03-14

好的,我的测试中缺少的解决问题的方法是:

 @ObjectFactory
    public IObjectFactory setObjectFactory() {
    return new PowerMockObjectFactory();
}

或者从PowerMockTestCase

细节

 类似资料:
  • 我想知道是否有一种方法来验证和调用一个模拟,该模拟是为一个私有静态方法创建的,该私有静态方法是从一个被测试的公共静态方法调用的。 下面是我正在测试的公共静态方法 我已经使用powermokito对私有静态方法进行了如下嘲弄:

  • 我试图用PowerMock在Mockito上模拟一个静态void方法,但它并不是那么好用。 我的示例代码: EvilBrother.java 我的问题是,嵌套类按照预期的方式使用@PrepareForTest和PowerMockito.MockStatic组合进行了模拟,但是如果类在自己的类文件中,这些语句就不起作用了。 如何修复这个测试? 与 尽管执行了assert.fail,但可以通过Powe

  • 我正在设置模拟类的静态方法。我必须在一个带有注释的JUnit安装方法之前的JUnit中进行此操作。 我的目标是将类设置为调用真正的方法,但我显式模拟的方法除外。 基本上: 我遇到的问题是,如果提供了值,则在中,方法不幸地抛出。 因此,我不能简单地将调用real方法作为默认答案,如下所示: 在模拟了我感兴趣的方法的结果之后,我需要将默认答案设置为在所有其他静态方法上调用real方法。 这可能吗?

  • 问题内容: 尝试在静态类中调用非静态方法时遇到错误。 无法从类型播放中静态引用非静态方法methodName() 我不能使该方法静态,因为这也给我一个错误。 此静态方法无法从xInterface隐藏实例方法 有什么办法可以在另一个静态方法中轮回调用非静态方法?(这两种方法位于单独的包和单独的类中)。 问题答案: 从静态方法中调用非静态方法的唯一方法是使类的实例包含非静态方法。根据定义,非静态方法是

  • 我正在尝试使用JUnit、Mockito和PowerMock验证对的调用。 下面是我的测试用例: 下面是测试中的代码: 非常有趣的是,这段代码失败时出现:

  • 我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。