How to mock a String using mockito?(如何使用 mockito 模拟字符串?)
问题描述
我需要模拟一个测试场景,在该场景中我调用 String 对象的 getBytes()
方法并得到 UnsupportedEncodingException.
I need to simulate a test scenario in which I call the getBytes()
method of a String object and I get an UnsupportedEncodingException.
我已尝试使用以下代码来实现:
I have tried to achieve that using the following code:
String nonEncodedString = mock(String.class);
when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));
问题是,当我运行我的测试用例时,我得到一个 MockitoException,它说我无法模拟 java.lang.String 类.
The problem is that when I run my test case I get a MockitoException that says that I can't mock a java.lang.String class.
有没有办法使用 mockito 来模拟 String 对象,或者,当我调用 getBytes 方法时,是否可以让我的 String 对象抛出 UnsupportedEncodingException?
Is there a way to mock a String object using mockito or, alternatively, a way to make my String object throw an UnsupportedEncodingException when I call the getBytes method?
这里有更多细节来说明问题:
Here are more details to illustrate the problem:
这是我要测试的类:
public final class A {
public static String f(String str){
try {
return new String(str.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
// This is the catch block that I want to exercise.
...
}
}
}
这是我的测试类(我正在使用 JUnit 4 和 mockito):
This is my testing class (I'm using JUnit 4 and mockito):
public class TestA {
@Test(expected=UnsupportedEncodingException.class)
public void test(){
String aString = mock(String.class);
when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));
A.f(aString);
}
}
推荐答案
问题是Java中的String
类被标记为final,所以使用传统的mocking框架不能mock.根据 Mockito FAQ,这也是该框架的限制.
The problem is the String
class in Java is marked as final, so you cannot mock is using traditional mocking frameworks. According to the Mockito FAQ, this is a limitation of that framework as well.
这篇关于如何使用 mockito 模拟字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用 mockito 模拟字符串?


- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01