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
