如何使用PowerMockito模拟静态方法?
我正在使用:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
我正在尝试通过以下调用测试一段代码:
I am attempting to test a piece of code with the following call:
final KeyPairGenerator kpg = KeyPairGenerator.getInstance(KEY_PAIR_ALGORITHM, DEFAULT_PROVIDER);
这两个常量的类型为String,所以我在打电话:
The two constants are of type String, so I'm calling:
java.security.KeyPairGenerator.getInstance(String algorithm, String provider)
我尝试过:
import static org.mockito.Mockito.when;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(KeyPairGenerator.class)
public class TestClass {
private static final String DEFAULT_PROVIDER = "BC";
private static final String KEY_PAIR_ALGORITHM = "RSA";
@Test
public void test() throws NoSuchAlgorithmException, NoSuchProviderException {
final KeyPairGenerator kpg = Mockito.mock(KeyPairGenerator.class);
PowerMockito.mockStatic(KeyPairGenerator.class);
when(KeyPairGenerator.getInstance(KEY_PAIR_ALGORITHM, DEFAULT_PROVIDER)).thenReturn(kpg);
}
}
我尝试用PowerMockito.doReturn(kpg).when(KeyPairGenerator.class);
替换when(KeyPairGenerator.getInstance(KEY_PAIR_ALGORITHM, DEFAULT_PROVIDER)).thenReturn(kpg);
,但似乎都无法将我带到想要的位置,因为我仍然遇到NoSuchProviderException.任何见识将不胜感激.
I've tried replacing when(KeyPairGenerator.getInstance(KEY_PAIR_ALGORITHM, DEFAULT_PROVIDER)).thenReturn(kpg);
with PowerMockito.doReturn(kpg).when(KeyPairGenerator.class);
but neither seem to get me where I want as I'm still getting the NoSuchProviderException. Any insight would be appreciated.
您可能想要尝试更改@PrepareForTest语句.
You might want try changing your line @PrepareForTest statement.
发件人:
@PrepareForTest(KeyPairGenerator.class)
收件人:
@PrepareForTest(ClassThatCallsTheStaticMethod.class)