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 模拟字符串?


基础教程推荐
- 如何在 Spring @Value 注解中正确指定默认值? 2022-01-01
- 不推荐使用 Api 注释的描述 2022-01-01
- Java Swing计时器未清除 2022-01-01
- 在 Java 中创建日期的正确方法是什么? 2022-01-01
- 如何在 JFrame 中覆盖 windowsClosing 事件 2022-01-01
- 验证是否调用了所有 getter 方法 2022-01-01
- 从 python 访问 JVM 2022-01-01
- 多个组件的复杂布局 2022-01-01
- 大摇大摆的枚举 2022-01-01
- Java 实例变量在两个语句中声明和初始化 2022-01-01