Mockito - thenReturn 始终返回 null 对象

2024-05-13

我正在尝试实现 Mockito 来测试特定方法,但 .thenReturn(...) 似乎总是返回一个 null 对象,而不是我想要的:

CUT:

public class TestClassFacade {

  // injected via Spring
  private InterfaceBP bpService;

  public void setBpService(InterfaceBP bpService) {

      this.bpService = bpService;
  }

  public TestVO getTestData(String testString) throws Exception {

    BPRequestVO bpRequestVO = new BPRequestVO();

    bpRequestVO.setGroupNumber(testString) ;
    bpRequestVO.setProductType("ALL") ;           
    bpRequestVO.setProfileType("Required - TEST") ;

    IBPServiceResponse serviceResponse = bpService.getProduct(bpRequestVO);  //PROBLEM

    if (serviceResponse.getMessage().equalsIgnoreCase("BOB")) {

        throw new Exception();

    } else {

        TestVO testVO = new TestVO();
    }

    return testVO;
  }

}

弹簧配置:

<bean id="testClass" class="com.foo.TestClassFacade">

   <property name="bpService" ref="bpService" />

</bean>

<bean id="bpService" class="class.cloud.BPService" />

Mockito测试方法:

@RunWith(MockitoJUnitRunner.class)
public class BaseTest {

    @Mock BPService mockBPService;
    @InjectMocks TestClassFacade mockTestClassFacade;

    private String testString = null;
    private BPRequestVO someBPRequestVO = new BPRequestVO();
    private IBPServiceResponse invalidServiceResponse = new BPServiceResponse();

    @Test (expected = Exception.class)
    public void getBPData_bobStatusCode_shouldThrowException() throws Exception {

        invalidServiceResponse.setMessage("BOB");

        someBPRequestVO.setGroupNumber(null);
        someBPRequestVO.setProductType("ALL");
        someBPRequestVO.setProfileType("Required - TEST");

        System.out.println("1: " + someBPRequestVO.getGroupNumber());
        System.out.println("2: " + someBPRequestVO.getProductType());
        System.out.println("3: " + someBPRequestVO.getProfileType());
        System.out.println("4: " + someBPRequestVO.getEffectiveDate());

        when(mockBPService.getProduct(someBPRequestVO)).thenReturn(invalidServiceResponse);

        mockTestClassFacade.getTestData(testString);

        verify(mockBPService).getProduct(someBPRequestVO);
    }
}

系统输出:

1: null
2: ALL
3: Required - TEST
4: null

这里发生的情况是,当我运行测试时,上面标有 //PROBLEM 的 CUT 行中的 serviceResponse 对象为 null。我的愿望是让该对象由我的测试方法中的“invalidServiceResponse”对象填充。从我的 System.out.println 的输出来看,我的 bpRequestVO 与我的 someBPRequestVO 的内容相匹配。

有人可以告诉我我在这里缺少什么吗?

谢谢你的时间!


您可以使用“any(YourObject.class)”创建一个模拟参数,而不是在 BPRequestVO 类中创建 equals 方法,如下所示:

when(mockBPService.getProduct(any(BPRequestVO.class))).thenReturn(invalidServiceResponse);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mockito - thenReturn 始终返回 null 对象 的相关文章

随机推荐

  • 使用 XPath 3.1 fn:serialize 进行 JSON 序列化

    我在 Saxon HE 9 8 中使用 XSLT 3 0 并且希望将 JSON 文档用作链接数据JSON LD https json ld org 在 JSON LD 中 完整的 HTTP URI 通常显示为值 当我使用 XPath 3 1
  • 插入并发问题-多线程环境

    我有一个问题 即使用完全相同的参数在完全相同的时间调用相同的存储过程 存储过程的目的是获取记录 如果存在 或创建并获取记录 如果不存在 问题是两个线程都在检查记录是否存在并报告错误 然后都插入新记录 在数据库中创建重复记录 我尝试将操作保留
  • 钛金 Android 导航组

    您好 我是钛合金新手 它允许开发人员创建跨平台应用程序 我需要创建一个适用于 Android 和 iOS 的导航组 有没有明确的解决方案 因为 Ti UI iPhone createNavigationGrou 仅适用于 iphone 谢谢
  • Itunes Connect 测试飞行公共链接有效性

    苹果最近为试飞版本启用了公共链接功能 我们可以与任何人共享此链接 他可以使用此公共链接安装应用程序 此公共链接背后的构建有效期为 90 天 我的问题是 与用户共享公共链接后 我们可以增加构建的到期时间吗 这样公共链接的有效性就会增加 我们不
  • 将颜色映射到plotly go.饼图中的标签

    我正在使用 make subplots 和 go Pie 绘制一系列 3 个饼图 我想最终将它们放入破折号应用程序中 用户可以在其中过滤数据并且数字将更新 如何将特定颜色映射到变量 以便男性始终为蓝色 女性始终为粉红色 等等 您可以使用 c
  • 使用 Terraform 管理访问 RDS 数据库的凭据时出现问题

    我通过 Terraform 创建了一个秘密 该秘密用于访问也在 Terraform 中定义的 RDS 数据库 并且在秘密中 我不想包含username and password 因此我创建了一个空密钥 然后在 AWS 控制台中手动添加凭证
  • 在继承的ctypes.Structure类的构造函数中调用from_buffer_copy

    我有以下代码 class MyStruct ctypes Structure fields id ctypes uint perm ctypes uint 定义类后 我可以直接从缓冲区复制数据到我的字段上 例如 ms MyStruct fr
  • 一个新的 JavaScript 数组长度是否无法使用? [复制]

    这个问题在这里已经有答案了 根据MDN 文档new Array length https developer mozilla org en US docs Web JavaScript Reference Global Objects Ar
  • 将数值数据更改为分类数据 - Pandas [重复]

    这个问题在这里已经有答案了 我有一个 pandas 数据框 其中有一个数字列 金额 金额从 0 到 20000 不等 我想将其更改为定义范围的分类变量 因此 分类变量将是 0 1000 之间 1000 2000 美元之间 依此类推 直到 1
  • 多个where条件codeigniter

    如何将此查询转换为活动记录 UPDATE table user SET email email last ip last ip where username username and status status 我尝试将上面的查询转换为 d
  • JavascriptCore:在 JSExport 中将 javascript 函数作为参数传递

    JavascriptCore是iOS7中支持的新框架 我们可以使用 JSExport 协议将 objc 类的部分内容公开给 JavaScript 在javascript中 我尝试将函数作为参数传递 像这样 function getJsonC
  • dmvnorm MVN 密度 - RcppArmadillo 实现比 R 包慢,包括一些 Fortran

    The solution现已上线RCPP画廊 http gallery rcpp org articles dmvnorm arma 我从 RcppArmadillo 中的 mvtnorm 包重新实现了 dmvnorm 我有点喜欢犰狳 但我
  • docker-compose mysql 容器拒绝访问 wordpress 容器

    我遇到 mysql 5 7 容器拒绝访问 wordpress 容器的问题 我正在使用 docker compose 并且在 Mac OSX 上运行 docker Docker 应该是可用的最新版本 这是我的 docker compose y
  • Python 和 sqlite3.ProgrammingError:不允许递归使用游标

    我写了一个像这样的Python程序 它应该在多线程模式下运行 def Func host cursor db cursor execute SELECT If index Username Version Community Ip traf
  • 如何检查是否启用了更改跟踪

    我试图在运行之前确定我的数据库是否已启用更改跟踪ALTER DATABASE命令来启用它 我试图防止这些脚本多次运行时出现错误 我签到了sys databases and sys dm tran commit table但无法找到我要找的东
  • 在 React.js 中有条件地设置 html 属性

    我在为 React 中的单选按钮组件设置默认选项时遇到了令人惊讶的困难 这是我的RadioToggle成分 jsx React DOM var RadioToggle React createClass render function va
  • VideoCamera 获取支持的分辨率

    我使用 DirectShow 库 DirectShowLib 2005 dll 和 C 来捕获摄像机图像 当我定义捕获对象的大小时 我有以下参数 const int VIDEOWIDTH 640 Depends on video devic
  • std::enable_if 和 std::enable_if_t 有什么区别?

    C 14 引入std enable if t 它和有什么区别std enable if 使用上有什么优点或者区别吗std enable if t std enable if t 是 std enable if 的内部 type 的类型别名
  • 使用 Boost:Asio 的游戏服务器如何异步工作?

    我正在尝试创建一个游戏服务器 目前我正在使用线程来制作它 每个对象 玩家 怪物 都有自己的带有 while 1 循环的线程 在其中执行特定的功能 服务器基本上是这样工作的 main some initialization while 1 r
  • Mockito - thenReturn 始终返回 null 对象

    我正在尝试实现 Mockito 来测试特定方法 但 thenReturn 似乎总是返回一个 null 对象 而不是我想要的 CUT public class TestClassFacade injected via Spring priva