gpt4 book ai didi

java - 与 SpringJUnit4ClassRunner.class 一起使用时,Mockito/PowerMockito 冲突(可能)

转载 作者:行者123 更新时间:2023-12-01 04:38:13 26 4
gpt4 key购买 nike

您好,我正在尝试将 PowerMockito 和 Mockito 与 @SpringJUnit4ClassRunner.class 一起使用。我不确定哪里有冲突。我已经成功地只使用了mockito,但是需要使用 PowerMockito 进行静态分析。

获得以下跟踪:

org.mockito.exceptions.misusing.UnfinishedStubbingException:此处检测到未完成的 stub :-> 在 org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:31)

...

测试代码的主要部分如下:

故障发生在第 2 行。如果删除第 1 行和第 3 行,则测试正常。如果将 SpringJUnit4ClassRunner.class 替换为 PowerMockRunner.class,测试也能正常工作。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@PrepareForTest({StatFactory.class})
public class TestMain {

@Test
public void testGetStatic() throws Exception {

PowerMockito.mockStatic(StatFactory.class); // 1
StatsFactory sf = mock(StatsFactory.class);
Main main = new Main();
PowerMockito.doReturn(false).when(StatFactory.class, "testFunction"); // 3
Mockito.when(sf.ok()).thenReturn(5); // 2

boolean ret = main.getData();
}

pom.xml
...
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.0.RELEASE</org.springframework-version>
<powermock.version>1.4.9</powermock.version>
</properties>
...
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.8.5</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
...

最佳答案

您可以使用PowerMock规则

这里有一个例子:http://www.jayway.com/2010/12/28/using-powermock-with-spring-integration-testing/

这就是静态字段的问题。它们很难测试。

这是 Misko Hevery 的一篇文章,解释了原因: http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/

关于java - 与 SpringJUnit4ClassRunner.class 一起使用时,Mockito/PowerMockito 冲突(可能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17024759/

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