繁体   English   中英

如何创建返回类型可选的此类方法的模拟 object<tuple></tuple>

[英]How to create mock object of such method which return type Optional<Tuple>

尝试在 Spring 引导服务中使用 Junit5 Mockito 编写测试用例的方法。 其中,JPA 查询返回数据为 Optional<Tuple。

我试过 mocking 元组如下,但它是 null。 我们如何为 Tuple 创建一个 Mock 并在其中设置值?

JPA 调用:

Optional<Tuple> meterDetails = meterDetailsRepo.
                    getMeterTypeByMeterId(request.getCompanyCode(), request.getMeterId());

在这里,我为上面的代码行尝试了 mocking


Tuple mockTuple = Mockito.mock(Tuple.class);
        Optional<Tuple> tupleOptional = Optional.ofNullable(mockTuple);
        Mockito.when(meterDetailsRepo.getById(id).thenReturn(tupleOptional);

我们如何设置上面的 Tuple (mockTuple) 中的值?

您不需要模拟元组,您可以使用可用的构建器简单地创建它:

Tuple testTuple = TupleBuilder.tuple().of("foo", "bar");
Mockito.when(meterDetailsRepo.getById(id)).thenReturn(Optional.of(testTuple));

首先,您似乎是 mocking 与您上面提到的“JPA 调用”不同的方法。 在一种情况下,方法的名称是getMeterTypeByMeterId ,但是当您使用 Mockito 设置期望时,您正在调用getById 我不是 Mockito 方面的专家,不过,我可能会感到困惑。

不管以上如何,如果你想要的是 mocking 一个服务中返回某个结果的方法,为什么不创建一个具有预期值的真实Tuple ,然后使用 Mockito 来模拟方法的执行? 就像是:

Tuple expectedTuple = TupleBuilder.tuple().of("foo", "bar");
Mockito.when(meterDetailsRepo.getById(id).thenReturn(Optional.of(expectedTuple)));

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM