gpt4 book ai didi

mockito - 在Mockito stub 中传递实际参数

转载 作者:行者123 更新时间:2023-12-03 10:07:05 24 4
gpt4 key购买 nike

对于在实际生产代码中放入 stub 变量的情况,
如何在JUnits中使用Mockito.when stub 传递实际参数?

例如,如果生产代码中的方法类似于:

1)servicaClass.doSomething(Calendar.getInstance)
2)servicaClass.doSomething(someMethodToCreateActualVariable())
在测试如何传递实际参数时?
喜欢

-> when(mockedServiceClass.doSomething(Calendar.geInstance)).thenReturn("")
但是,在测试过程中,生产代码将在执行时采用其自己的日历值。

对于填充的已用变量,可以有一种公开设置方法的方法。但这似乎不是最佳解决方案。

在这方面有什么建议会有所帮助吗?

最佳答案

如果您知道事实之前的匹配值,则可以使用 stub 。像eq(与equals比较)和same(与==比较)之类的Mockito匹配器将在那里提供帮助,或者您可以通过直接指定值来获得eq行为。请注意,如果您使用所有值,则必须对所有值使用Matchers;您不能将Matchers仅用于两个参数的方法调用中的一个参数。

// Without matchers
when(yourMock.method(objectToBeComparedWithEquals))
.thenReturn(returnValue);

// With matchers
when(yourMock.method(eq(objectToBeComparedWithEquals)))
.thenReturn(returnValue);
when(yourMock.method(same(objectToBeComparedReferentially)))
.thenReturn(returnValue);

如果直到运行方法后才知道匹配值,则可能需要验证。匹配器也适用相同的规则。
SomeValue someValue = yourSystemUnderTest.action();
verify(yourMock).initializeValue(someValue);

而且,如果您需要在事后检查值,则可以使用Captor:
ArgumentCaptor myCaptor = ArgumentCaptor.forClass(SomeValue.class);
yourSystemUnderTest.action();
verify(yourMock).initializeValue(myCaptor.capture());
SomeValue valueMockWasCalledWith = myCaptor.getValue();

// Now you've retrieved the reference out of the mock, so you can assert as usual.
assertEquals(42, valueMockWasCalledWith.getInteger());

关于mockito - 在Mockito stub 中传递实际参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com