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()”时设置预期
- 调用静态方法。
- 验证预期和实际结果。