我在模拟一个HttpServletRequest,在servlet调用中有新的值在请求中设置,因为使用相同的请求我们正在向一些jsp调度请求,因此请求对象被用作servlet的输入对象以及下一页的输出.
我嘲笑了所有的输入参数,但对于所有的request.setAttribute(),我的代码什么也没做,因为它是一个模拟类,比如我有
request.setAttribute(a,"10")
System.out.println("a = " + request.getAttribute("a"));
Run Code Online (Sandbox Code Playgroud)
我得到null因为我没有给Request.getAttribute("a")任何行为,我不能,这是我对下一页的回应,所以解释我需要2个行为我的请求对象因此部分嘲笑,而我到目前为止我无法间谍或做任何部分嘲弄.有任何想法吗?
代码:
//Testcase
Myservlet.java
public void doPost(request,response)
{
String a = request.getAttribute("a");
String b = request.getAttribute("b");
int sum = Integer.parseInt(a) + Integer.parseInt(b);
request.setAttribute("sum",sum);
//well in this example i can use sum what i calculated but in real senario i can't , i have to use request.getAttribute("sum")
insertSumIntoDB(request.getAttribute("sum"));
}
}
//testMyservlet.java
@test
public void testServlet()
{
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
when(request.getAttribute(a)).thenReturn("10");
when(request.getAttribute(b)).thenReturn("20");
new Myservlet(request,response);
}
Run Code Online (Sandbox Code Playgroud) 我有一个独立的项目来编写测试用例; 问题是我无法模拟HttpServletRequest,只是因为在我的servlet中有一些调用就像getServletContext()测试用例是从外部servlet容器运行的.它总是会返回一个错误,说"没有找到上下文".这只是servlet容器的一个依赖项; 可能有数百个.例如,initialContext.lookup()还取决于容器.
在这种情况下,如何使用Mockito编写测试用例?请不要询问错误信息; 它更像是一个逻辑问题,而不是技术问题.
在互联网上寻找教程让我想知道我是否做了严重的错误.似乎没有人在遇到过这个问题之前......你怎么能在HttpServletRequest没有getServletContext()调用servlet的情况下进行模拟?我的意思是认真的,它有多罕见?
我想要部分嘲笑,Httpsession但为此我需要窥探而不是嘲笑它,而且这是一个我已经无法获得的请求对象无法获得的接口.
请帮忙.
换句话说,我怎样才能得到HttpSession没有HttpServletRequest物体的物体.
更多详情::
有一个我要测试的servlet,servlet有会话,并在会话中放入"loginBean"(包含loged在用户相关信息中),我已经嘲笑过并且工作正常,现在在GUI级别,有2个选项卡,DetailSet1, detailsSet2,当您输入DetailSet1的数据时,它会保存在会话中并且还会执行一些业务逻辑,现在它来到DetailsSet2,您已经在会话中拥有DetailSet1,因此它可以满足所有需要,数据保存在DB中.不,很明显我必须模拟,HttpSession因为我从容器外部运行单元案例,但是存储的数据也在Httpsession ,如果我也嘲笑那些,它就会破坏测试的目的.回到我开始的时候,我需要Httpsession返回模拟数据的对象,我已经模拟了它,并且假设它像HttpSession其他情况的任何普通对象一样.就像,如果我做session.setAttribute("name","Vivek"),那么session.getAttribute("name")应该return "Vivek"在那之后,但是在模拟对象的情况下它返回null原因?因为我没有嘲笑行为getAttribute("name").我真的很抱歉,如果我仍然可以不让任何人理解我的要求.
用简单的词语部分嘲笑HttpSession.
我有以下情况:
<div id="myMenu">
<div id="menu0">stuffs</div>
<div id="menu1">stuffs</div>
<div id="menu2">stuffs</div>
...... and so on
</div>
Run Code Online (Sandbox Code Playgroud)
我的要求是访问$=menu内部有 id 的所有 div,myMenu除了menu0,因为我的菜单可以有 10 到 15 个项目,所以一种方法是:
#myMenu > menu1 {style}
#myMenu > menu2 {style}
so on... 15 times
Run Code Online (Sandbox Code Playgroud)
但由于我必须为所有这些提供相同的样式,这似乎没有必要,我正在寻找能够正确满足我的要求并且兼容 IE8 的 CSS 选择器。
任何帮助是极大的赞赏。
有一个我想要测试的servlet,servlet有会话,并在会话中放入"loginBean"(其中包含登录的用户相关信息),我已经嘲笑并且工作正常,现在在GUI级别,有2个选项卡,DetailSet1, detailsSet2,当你输入DetailSet1的数据时,它会被保存在会话中并且也会做一些业务逻辑,现在它来到DetailsSet2,你已经在会话中有了DetailSet1,所以它得到了它所需要的一切,数据保存在DB中.现在很明显我必须模拟HttpSession,因为我从容器外部运行单元格,但是存储的数据也在HttpSession中,如果我也嘲笑它们,它就会破坏测试的目的.所以我的问题是,我需要HttpSession对象返回我模拟的模拟数据,并假设其他情况下的任何正常HttpSession对象.就像,如果代码确实如此session.setAttribute("name","Vivek"),那么之后session.getAttribute("name")应该返回"Vivek",但是在模拟对象的情况下它返回"NULL"为什么?因为我没有嘲笑"getAttribute("name")的行为.
简单来说,HttpSession或Interfaces的部分模拟.