【发布时间】:2016-03-14 06:28:15
【问题描述】:
对于在实际生产代码中生成存根变量的情况, 我们如何通过存根传递实际参数,例如在 JUnits 中使用 Mockito.when?
例如,如果生产代码中的方法是这样的:
1) servicaClass.doSomething(Calendar.getInstance)
2) servicaClass.doSomething(someMethodToCreateActualVariable())
在测试如何传递实际参数时? 喜欢
->when(mockedServiceClass.doSomething(Calendar.geInstance)).thenReturn("")
但是在测试生产代码时会在执行时采用自己的日历值。
有一种方法可以为使用的变量创建公共的 setter getter 方法。但这似乎不是最佳解决方案。
关于这方面的任何指示都会有所帮助吗?
【问题讨论】:
-
不会简单地使用
Mockito.any( Calendar.class )为您解决问题吗?如果您需要它更复杂,您可以使用 Answer 对象而不是简单的返回值来允许对各种输入参数做出更具体的反应... -
不想使用 any() 匹配器(想用实际参数测试)。我也看过Answer,但不确定它如何在实际代码中传递所需的参数进行测试。
-
如果实际参数是即时创建的,例如
Calendar.getInstance(),Matchers是您最好的机会。你可以试试Mockito.eq(...)。而Answer只是获取一个InvocationMock对象,您可以从中获取实际的参数对象。 -
是的,仍然无法动态操作使用的参数。 Mockito.any() 只是帮助事业。 Answer 或 ArgumentCaptor 只能让我知道运行时使用了哪些参数。如果有的话需要检查一下吗?
-
老实说,现在我不知道你想做什么以及为什么。请解释一下。