Mockito模拟静态方法
时间:2020-02-23 14:35:28 来源:igfitidea点击:
在本教程中,我们将看到Mockito Mock静态方法。
如果要模拟静态方法,则需要使用PowerMockito。
PowerMockito能够测试私有,最终或者静态方法,因为它使用Java Reflection API。
让我们创建一个简单的例子 mock static method使用powermockito。
1.创建一个简单的Java Maven项目。
2.使用maven添加依赖项
让我们将PowerMock依赖项添加到我们的Maven项目中。
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.4</version>
<scope>test</scope>
</dependency>
pom.xml如下所示:
<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.igi.theitroad</groupId> <artifactId>PowerMockitoExample</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>1.6.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.6.4</version> <scope>test</scope> </dependency> </dependencies> </project>
现在我们正在添加依赖项,让我们在测试中使用注释。
3.启用PowerMock注释
就像我们对Mockito所需的一样,我们还需要使用PowerMockito使用注释。
像Mockito一样,我们利用类似的注释,如图所示:
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "org.igi.theitroad.*")
public class PowerTest {
...
}
让我们看看我们上面使用的每个注释:
@RunWith注释类似于我们在Mockito中所做的内容。我们将在此时间使用PowerMockRunner,而不是使用Mockito,而是将在测试中启用PowerMockito API。@PrepareForTest通知PowerMockito程序准备Java Reflection API进行测试。
4.使用静态方法创建类
创建一个名为的类 StringUtil。
这是正在测试的程序。
它有一个名为的静态方法 checkSubString()。
我们要嘲笑这一点 checkSubString()使用powermockito。
package org.igi.theitroad.mockito;
public class StringUtil {
public static boolean checkSubString(String s1,String s2)
{
if(s1.contains(s2))
{
return true;
}
else
{
return false;
}
}
}
5.创建测试类以模拟静态方法
创建类命名 PowerMockStaticMethodTest模拟静态方法
package org.igi.theitroad.mockito;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(StringUtil.class)
public class PowerMockStaticMethodTest
{
@Test
public void test_StringUtil_staticMethod() {
boolean expectation=true; //1
PowerMockito.mockStatic(StringUtil.class); //2
PowerMockito.when(StringUtil.checkSubString("theitroad","blog")).thenReturn(true); //3
boolean actual = StringUtil.checkSubString("theitroad","blog"); //4
Assert.assertEquals(expectation, actual); //5
}
}
逐一逐一完成:
- 我们定义了一个布尔曲目
true。 - 另一个通用字符串消息,用作期望。
- 准备
StringUtil用于静态方法测试。 - 在调用静态方法“checkSubString()”时设置预期
- 调用静态方法。
- 验证预期和实际结果。

