java powermock公共桩_java – 使用PowerMock,Mockito和TestNG模拟公共方法中使用的私有方法...

我想为我上课写一个单元测试.这个类有一个公共方法,在public方法中,在同一个类中调用私有方法.我想模拟对这些私有方法的调用.该类与此类似:

public class SomeClass {

public int somePublicMethod(int num) {

int num2 = somePrivateMethod1(num);

int num3 = somePrivateMethod2(num);

return num2 + num3;

}

private int somePrivateMethod1(int num) {

return 2*num;

}

private int somePrivateMethod2(int num) {

return 3*num;

}

}

对于我的单元测试,我试图将PowerMock与Mockito和TestNG一起使用.这是我尝试测试somePublicMethod的测试:

import static org.powermock.api.mockito.PowerMockito.doReturn;

import static org.powermock.api.mockito.PowerMockito.spy;

import org.powermock.core.classloader.annotations.PrepareForTest;

import org.testng.Assert;

import org.testng.annotations.Test;

@PrepareForTest(SomeClass.class)

public class SomeClassTest {

@Test

public void testSomePublicMethod() throws Exception {

int num = 4;

SomeClass someClassSpy = spy(new SomeClass());

doReturn(8).when(someClassSpy, "somePrivateMethod1", num);

doReturn(12).when(someClassSpy, "somePrivateMethod2", num);

int result = someClassSpy.somePublicMethod(num);

Assert.assertEquals(result, 20);

}

}

当我运行此测试时,我得到一个异常和一些提示:

FAILED: testSomePublicMethod

org.mockito.exceptions.misusing.UnfinishedStubbingException:

Unfinished stubbing detected here:

-> at org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:31)

E.g. thenReturn() may be missing.

Examples of correct stubbing:

when(mock.isOk()).thenReturn(true);

when(mock.isOk()).thenThrow(exception);

doThrow(exception).when(mock).someVoidMethod();

Hints:

1. missing thenReturn()

2. you are trying to stub a final method, you naughty developer!

我在网上查看了一些例子,但我没有找到一个将Mockito和TestNG专门用于PowerMock来做我想做的事情.有人可以给我一些关于我能做些什么的指示吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在项目的pom.xml文件添加PowerMockTestNG的依赖: ```xml <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.0.0</version> <scope>test</scope> </dependency> ``` 然后,编写测试类: ```java import org.powermock.api.mockito.PowerMockito; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class TopicTest { private Topic topic; @BeforeMethod public void setUp() { topic = PowerMockito.spy(new Topic()); } @Test public void testGetTopic() { String expected = "Test topic"; topic.setTopic(expected); String actual = topic.getTopic(); assertEquals(actual, expected); } } ``` 在这个测试,我们使用PowerMockito.spy()方法创建Topic类的一个Spy对象,这样我们就可以对其进行模拟。然后,我们设置topic属性并使用getTopic()方法获取它,并使用TestNG的Assert.assertEquals()方法来比较期望的和实际的值。 最后,我们可以在测试运行器执行这个测试类,例如使用Maven Surefire插件: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <includes> <include>**/*Test.java</include> </includes> </configuration> </plugin> ``` 这样,我们就可以运行mvn test命令来执行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值