- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了下面的代码:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Integer.class)
public class TestClass{
@Test
public void test(){
PowerMockito.mockStatic(Integer.class);
when(Integer.parseInt(anyString())).thenReturn(0);
System.out.println(Integer.parseInt("12"));
}
}
我收到以下错误消息:
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at com.ctc.dime.services.autopublisher.stores.StoresPublishingServiceTest.test(StoresPublishingServiceTest.java:120)
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!
at org.powermock.api.mockito.internal.invocationcontrol.MockitoMethodInvocationControl.performIntercept(MockitoMethodInvocationControl.java:291)
at org.powermock.api.mockito.internal.invocationcontrol.MockitoMethodInvocationControl.invoke(MockitoMethodInvocationControl.java:193)
at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:105)
at org.powermock.core.MockGateway.methodCall(MockGateway.java:168)
b.....
我做错了什么?
最佳答案
您应该准备使用系统类的类,而不是系统类本身。参见 https://code.google.com/p/powermock/wiki/MockSystem
参见 Powermock FAQ :
I cannot mock classes in from java.lang, java.net, java.io or other system classes, why?
This is because they're loaded by Java's bootstrap classloader and cannot be byte-code manipulated by PowerMock's classloader. Since PowerMock 1.2.5 there's a work-around, please have a look at this simple example to see how it's done.
我做了一个小测试,它似乎对 java.lang.String 有效,但出于某种原因对 java.lang.Integer 无效。请参阅下面的类(class)。第一种方法失败。第二个 String.format 有效。这对我来说似乎是一个 Powermock 错误。
第三种方法是我常用的解决方法,可以避免静态或系统模拟。我只是创建了一个包保护方法,并在我的测试中监视它。我推荐相同的。这比涉及 Powermock 更好。
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
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( { Dummy.class } )
public class TestClass{
@Test
public void testStaticIntegerMocking(){
PowerMockito.mockStatic(Integer.class);
when(Integer.parseInt(anyString())).thenReturn(0);
System.out.println(Dummy.parseInt("12"));
}
@Test
public void assertThatMockingStringWorks() throws Exception {
PowerMockito.mockStatic(String.class);
final String string = "string";
final String args = "args";
final String returnValue = "returnValue";
when(String.format(string, args)).thenReturn(returnValue);
final Dummy systemClassUser = new Dummy();
assertEquals(systemClassUser.format(string, args), returnValue);
}
@Test
public void testSpying(){
Dummy dummy = new Dummy();
dummy = spy(dummy);
doReturn( 0 ).when(dummy).parseIntToBeSpyed(anyString());
System.out.println(dummy.parseIntToBeSpyed("12"));
}
}
虚拟类:
import java.io.IOException;
public class Dummy {
public static Integer parseInt( String string ) {
return Integer.parseInt(string);
}
public String format(String one, String args) throws IOException {
return String.format(one, args);
}
public Integer parseIntToBeSpyed( String string ) {
return Integer.parseInt(string);
}
}
关于testing - org.mockito.exceptions.misusing.UnfinishedStubbingException 检测到未完成的 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28437313/
我已经 mock 了 couchbase 类,例如 @Mock CouchBaseRepository couchBaseRepository; 并尝试使用它: boolean ifExists =
您好,我有这个 PowerMockito 测试,它会抛出 UnfinishedStubbingException @RunWith(PowerMockRunner.class) @PrepareFor
测试代码为: import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; i
@MockBean private RestTemplateBuilder restTemplateBuilder; @MockBean private RestTemplate restTempla
我是 Mockito 的新手,我曾尝试调查此异常,但我还没有找到具体的答案。当我一起使用两个模拟时,它会发生在我的代码中,这意味着我通过一个模拟的构造函数,另一个模拟。像这样: ... Operati
我已经阅读了很多有关此错误的内容,但找不到解决方案。 这是我的示例代码,您可以复制它并启动它以重现错误。 主类: package example; import org.junit.runner.Ru
我想在我的发票类中 stub 方法generateReferenceNumber(): public class Invoice { private String id; privat
我正在尝试模拟一个客户端响应不佳的服务进行测试。我仍然在 min eclass 中收到 UnfinishedStubbingException 而不是 ClientResponseFailure,而且
当另一个方法中的 spyAnotherService.getUrl(ID) 时,我试图进行 spy /模拟并返回一个虚拟 Url,该方法是 myService.deleteSomething(name
您好,我正在尝试使用 Mockito 测试方法并收到 UnfinishedStubbingException。我是 Mockito 的新手,不确定我是否在做一些了不起的事情:) 这些是我的 stub
我想测试一个内部使用静态方法的方法,这就是我使用 PowerMockito 的原因。我想模拟对 Request.Get 的调用来自 Http 客户端 Fluent API。我设置了一个简单的测试,但出
好吧,我显然不太明白 doReturn(...).when(...) 和 when(...).thenReturn(...) 之间的区别。 问题是,当我上课时,我用 @Mock 注释模拟,并在我想测试
我可以将模拟对象作为参数传递给 thenThrow() 方法吗?我有这样的东西: public class MyException extends Exception { public MyE
尝试让 Mockito 和 PowerMock 正常运行,但在尝试运行此代码时遇到 UnfinishedStubbingException: @RunWith(PowerMockRunner.clas
我正在尝试使用 Mockito 的 Spy 部分模拟服务,覆盖一个方法以使其返回一致的数据以进行测试,但说 spy 无缘无故抛出 UnfinishedStubbingException。 这是我的测试
运行以下代码时,我收到错误消息 Unfinished Stubbing here detected: import static org.mockito.Mockito.mock; import st
我正在尝试verify在FileChooser上调用方法。 我在Groovy中编码,这似乎是问题所在。 我正在使用“孵化”的Mockito功能,该功能甚至可以模拟final类。 代码是: Fi
我有一个 LoggerInterceptor 类,其参数为 InspirationContext。对于这门课,我试图编写一个单元测试,但我被困在第一行: public class LoggerInte
以下代码导致 UnfinishedStubbingException PowerMockito.doNothing().when(widgetHelper).invokeAuditService(Ma
我写了下面的代码: @RunWith(PowerMockRunner.class) @PrepareForTest(Integer.class) public class TestClass{
我是一名优秀的程序员,十分优秀!