如何使用Mockito模拟字符串? [英] How to mock a String using mockito?

查看:549
本文介绍了如何使用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.

有没有一种方法可以使用嘲笑来模拟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,因此您不能使用传统的模拟框架进行模拟.根据 Mockito常见问题解答,这也是该框架的局限性.

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模拟字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆