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