gpt4 book ai didi

java - PowerMock 模拟抽象类中的静态方法

转载 作者:行者123 更新时间:2023-12-02 14:38:58 31 4
gpt4 key购买 nike

我在 Stack 上看到过这个问题的另一个例子,但没有答案。谁能根据经验(或任何其他深奥的手段)告诉我这是否可能做到?我已经遵循了我能找到的所有模拟静态方法的示例,但还没有找到适用于抽象类中的静态方法的示例。两个方法失败并出现 MissingMethodInitationException:

File[] files = {goodFile, badFile};
PowerMockito.mockStatic(AbstractFileImporter.class);

// fails with MissingMethodInvocationException
PowerMockito.when(AbstractFileImporter.getFiles(".")).thenReturn(files);

并且:

// fails with MissingMethodInvocationException
BDDMockito.given(AbstractFileImporter.getFiles(".")).willReturn(files);

然而此方法因 IllegalStateException 失败:

// fails with IllegalStateException
expect(AbstractFileImporter.getFiles(".")).andReturn(files);

我对模拟还很陌生,因此在艰难地完成所有这些工作时,任何可以用作资源的建议或良好的网站链接都会非常有帮助。顺便说一句,我在重构方面确实有一些余地,但在使用不同的工具/实用程序方面却没有余地,所以我只能使用 Mockito/PowerMock 和 TestNG。

最佳答案

好的,我尝试将我的示例转换为 TestNG,在遵循 https://code.google.com/p/powermock/wiki/TestNG_usage 中的示例后,它对我有用。 .

当我省略所需的测试类注释@PrepareForTest(AbstractAnimal.class)时,我得到了您提到的MissingMethodInitationException

我正在使用 eclipse 4.4.1 和 TestNG 插件版本 6.8.6。

请参阅下面的转换后的示例和依赖项。另外,请注意 PowerMockTestCase 的扩展。我没有更改示例类 AbstractAnimal

import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.Assert;
import org.testng.annotations.Test;

@PrepareForTest(AbstractAnimal.class)
public class AbstractAnimalTest extends PowerMockTestCase {

@Test
public void shouldGetMockedHello() {
PowerMockito.mockStatic(AbstractAnimal.class);
PowerMockito.when(AbstractAnimal.getHello()).thenReturn("Hello mocked animal world!");

String greetings = AbstractAnimal.getHello();
Assert.assertTrue(greetings.equals("Hello mocked animal world!"));
}

}

依赖项(我尝试使用您的版本):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.gnollix.stackoverflow</groupId>
<artifactId>mock-static-abstract</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.5.6</version>
</dependency>
</dependencies>

</project>

已解决的依赖关系:

resolved dependencies

希望有用!

关于java - PowerMock 模拟抽象类中的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27870953/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com