当前位置: 首页 > 面试题库 >

如何在Mockito中更改字符串的默认返回值?

易扬
2023-03-14
问题内容

2010年的这个问题暗示了我正在尝试做的事情。

我正在进行单元测试,该单元测试的代码需要许多模拟对象来完成所需的工作(测试HTML +
PDF渲染)。为了使测试成功,我需要生成许多模拟对象,并且每个对象最终都会将一些String数据返回到要测试的代码中。


我可以通过实现自己的Answer类或实现此目的IMockitoConfiguration,但是我不确定如何实现它们,因此它们仅影响返回String的方法。

我觉得下面的代码接近我想要的。引发强制转换异常java.lang.ClassCastException: java.lang.String cannot be cast to com.mypackage.ISOCountry。我认为这意味着我需要以某种方式默认或限制,Answer以仅影响的默认设置String

private Address createAddress(){
    Address address = mock(Address.class, new StringAnswer() );

    /* I want to replace repetitive calls like this, with a default string. 
    I just need these getters to return a String, not a specific string.

    when(address.getLocality()).thenReturn("Louisville");
    when(address.getStreet1()).thenReturn("1234 Fake Street Ln.");
    when(address.getStreet2()).thenReturn("Suite 1337");
    when(address.getRegion()).thenReturn("AK");
    when(address.getPostal()).thenReturn("45069");   
    */

    ISOCountry isoCountry = mock(ISOCountry.class);
    when(isoCountry.getIsocode()).thenReturn("US");
    when(address.getCountry()).thenReturn(isoCountry);

    return address;
}

//EDIT: This method returns an arbitrary string
private class StringAnswer implements Answer<Object> {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        String generatedString = "Generated String!";
           if( invocation.getMethod().getReturnType().isInstance( generatedString )){
               return generatedString;
           }
           else{
               return Mockito.RETURNS_DEFAULTS.answer(invocation);
           }
       }
}

我如何设置Mockito在默认情况下为返回String的模拟类上的方法返回生成的String?我找到了这部分问题的解决方案

为了加分,我如何使生成的值成为形式为String的String
Class.methodName?例如,"Address.getStreet1()"而不只是随机的String?


问题答案:

我完全能够回答自己的问题。

在此示例中,将生成一个具有路易斯维尔地区性的地址,而其他字段则类似于“ address.getStreet1();”。

private Address createAddress(){
    Address address = mock(Address.class, new StringAnswer() );

    when(address.getLocality()).thenReturn("Louisville");

    ISOCountry isoCountry = mock(ISOCountry.class);
    when(isoCountry.getIsocode()).thenReturn("US");
    when(address.getCountry()).thenReturn(isoCountry);

    return address;
}

private class StringAnswer implements Answer<Object> {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
           if( invocation.getMethod().getReturnType().equals(String.class)){
               return invocation.toString();
           }
           else{
               return Mockito.RETURNS_DEFAULTS.answer(invocation);
           }
       }
}


 类似资料:
  • 2010年的这个问题暗示了我正在努力做什么。

  • 问题内容: 有一个MySQL 具有以下定义: 我想将此表的更改为。怎么做 ? 问题答案: 如果要将表和所有字符列更改为新字符集,请使用如下语句: 因此查询将是:

  • 问题内容: 如果我们;默认执行此操作,则会添加空格字符以填充10,对吗?有办法改变吗? 我知道,您可以0通过0在之前指定来添加s,但是还printf支持其他功能吗? 问题答案: 不。空间是硬编码的。这甚至是java.util.Formatter源的代码段: 如果您希望获得不同的填充,可以执行后格式替换或类似的操作:

  • 我正在尝试在Opportunity更改Stage Standard对象的默认值 我采取的步骤: 使用规则条件创建工作流规则机会:创建日期不等于null 评估标准在创建记录时评估规则。 将操作添加为字段更新,并为拾取列表选择值 激活规则 但是没有发生任何事情,因为默认值仍然是-NONE- 我错过了什么?作为salesforce新手,我也不想使用扳机或按钮。

  • 问题内容: 在我的系统中,数据插入始终是通过logstash通过csv文件完成的。我从未预定义映射。但每当我输入它总是被一个字符串是,其结果就像一个条目被分为,,,。无论如何,我是否可以更改elasticsearch的默认/动态映射,以便所有字符串(无论索引如何,无论类型如何)都被视为?还是有一种在文件中设置它的方法?说我的档案看起来像 我希望所有的字符串都是这样,我也不介意将其作为所有将来的数据

  • 问题内容: 我有一个在某些情况下会返回字符串的函数,即当程序在Linux或MacOS上运行时,否则返回值应为nil,以便在代码中进一步省略一些特定于OS的检查。 但是,当我尝试编译此代码时,出现错误: test.go:10:3​​:不能在返回参数中使用nil作为类型字符串。 如果我只返回一个空字符串(如),则无法将此返回值与代码中的进一步内容进行比较。 那么问题是如何返回正确的nil字符串值? 谢