如何使用Mockito在模拟对象上设置属性?

时间:2013-11-12 03:21:39

标签: java junit mockito

我有一个场景,我必须按如下方式设置模拟对象的属性:

SlingHttpRequest slingHttpRequest= mock(SlingHttpRequest);
slingHttpRequest.setAttribute("search", someObject);

当我尝试打印此属性时,我得到null。如何设置此属性?

4 个答案:

答案 0 :(得分:14)

您通常不会在模拟对象上设置属性;相反,你在调用时会做一些特定的事情。

when(slingHttpRequest.getAttribute("search")).thenReturn(someObject);

答案 1 :(得分:0)

Mock对象不是存储数据的地方,它是在调用方法时教你的行为。

试试这个:https://www.google.com/search?q=mockito+example&oq=mockito+example&aqs=chrome..69i57j0l5.6790j0j7&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8

答案 2 :(得分:0)

我担心你会误用你的模拟SlingHttpRequest

Mockito要求您在测试场景中使用之前连接模拟属性,即:

Mockito.when(slingHttpRequest.getAttribute("search")).thenReturn(new Attribute());

您无法在测试期间调用setAttribute(final Attribute a)方法,如下所示:

slingHttpRequest.setAttribute(someObject);

如果您这样做,测试运行时,getAttribute()将返回null

很明显,如果您进行单元测试的代码将以这种方式调用模拟器上的setter,请不要使用mock。使用stub

答案 3 :(得分:0)

我可能迟到了 7 年参加聚会,但我仍然想做出贡献。

您可以使用来自 powermock 的 Whitebox 设置类属性:

Whitebox.setInternalState(mockedClass, "internalField", "Value to be returned")