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



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

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

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

您通常不会在模拟对象上设置属性;相反,您会在调用它时执行一些特定操作。

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

恐怕你滥用了你的模拟SlingHttpRequest.

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

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

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

slingHttpRequest.setAttribute(someObject) ;

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

偶然地,如果你正在单元测试的代码将以这种方式在你的模拟上调用一个setter,请不要使用模拟。使用存根。

模拟对象不是存储数据的地方,而是在调用其方法时教授行为。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新