23

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

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

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

4

4 回答 4

36

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

when(slingHttpRequest.getAttribute("search")).thenReturn(someObject);
于 2013-11-12T03:23:44.887 回答
3

恐怕你在滥用你的 mock SlingHttpRequest

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

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

您不能setAttribute(final Attribute a)像这样在测试期间调用该方法:

slingHttpRequest.setAttribute(someObject);

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

顺便说一句,如果您正在单元测试的代码将以这种方式在您的模拟上调用设置器,请不要使用模拟。使用存根

于 2017-10-03T15:55:40.103 回答
0

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

试试这个: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

于 2013-11-12T03:31:17.543 回答
0

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

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

Whitebox.setInternalState(mockedClass, "internalField", "Value to be returned")
于 2021-05-19T19:53:06.890 回答