当前位置: 首页 > 知识库问答 >
问题:

使用Junit 4 for java servlet的Happy Flow测试用例

孟晋
2023-03-14

我正在尝试使用Junit 4测试我的servlet类的快乐流。即使测试通过,代码覆盖率也只有37%。需要帮助了解哪里出了问题以及如何纠正。

测试用例

public class SearchOrganizationTest extends Mockito{

    private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
    private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
    private final PrintStream originalOut = System.out;
    private final PrintStream originalErr = System.err;

    @Before
    public void setUpStreams() {
        System.setOut(new PrintStream(outContent));
        System.setErr(new PrintStream(errContent));
    }
    @After 
    public void restoreStreams() {
        System.setOut(originalOut);
        System.setErr(originalErr);
    }
    @Mock
    private Organization org;
    @InjectMocks
    SearchOrganization mockSearchOrganization;
    @Test //Test code for checking whether the Search Organization outer (invoking) function is working fine
    public void testServlet() throws Exception {
        HttpServletRequest request = mock(HttpServletRequest.class);       
        HttpServletResponse response = mock(HttpServletResponse.class);

        try {
            StringWriter stringWriter = new StringWriter();
            PrintWriter writer = new PrintWriter(stringWriter);
            when(response.getWriter()).thenReturn(writer);

            new SearchOrganization().doPost(request, response); //calling the function with the dummy parameters
            System.out.print("hello");
            String res = outContent.toString();
            assertEquals(res, outContent.toString());
            System.err.print("hello again");
            assertEquals("hello again", errContent.toString());

            writer.flush(); // it may not have been flushed yet...
        }catch(Exception e){}
    }
}

SearchOrganization。班

//Invoking the method on the submission of the form
@WebServlet("/viewOrganization")
public class SearchOrganization extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        RequestDispatcher dispatcher=request.getRequestDispatcher("SearchOrg.html");
        PrintWriter out=response.getWriter();
        //Getting the attributes from the UI

        try {
            DataConnection ds =new DataConnection();
            String org_name = request.getParameter("searchOrg");

            //Setting the objects to insert the achieved attributes to corresponding the columns of the table

            Organization searchOrg = new Organization();

            searchOrg.setOrgName(org_name);
            dispatcher.include(request, response);
            //calling and fetching the details recieved by the getOrganizations function from OrganizationDao class
            List<Organization> list = new OrganizationDao(ds).getOrganization(searchOrg);
            out.print("<h3 align = 'center'>Orgnanization Name</h3>");
            out.print("<table class= 'fixed_header' align= 'center' ");
            out.print("<thead>");
            out.print("</thead>");
            out.print("<tbody");  
            //listing the values fetched by the function to appropriate columns of a table 
            for(Organization e:list){  
                out.print("<tr><td style='padding:10px'><a href='SearchOrg.html?orgName="+e.getOrgName()+"'>"+e.getOrgName()+"</a></td></tr>");
            }  

            out.print("</tbody>");  
            out.print("</table>");

            out.close();
        }catch(Exception e) {System.out.println("SearchOrganizatin: doPost() - "+e);}
    }
}

*在调度程序中。包括(请求、响应) 测试用例打破了愉快的流程,直接进入捕获(异常e){System.out.println(“SearchOrganizatin:doPost()-”e);} 零件。

我需要知道如何忽略dispatcher.include(请求,响应);以便在那之后继续流。

共有1个答案

卢光远
2023-03-14

您需要处理模拟的请求对象,并在调用getParameter时返回模拟的调度程序。

像这样的东西

java prettyprint-override">when(request.getParameter(Mockito.anyString())).thenReturn(mocked-dispatcher-object);
 类似资料:
  • 我对junit mockito非常陌生,并尝试使用mockito编写junit测试用例。 这是我的方法,我必须为此编写一个jUnit。 ChefService和ChefApi传递的方法参数来自第三方api 这里是呼叫chefService。listCookbookVersions()将返回CookBookVersion类类型的迭代器,如

  • 我有下面一个班的方法。 使用mockito的junit测试用例将提供100%的代码覆盖率。

  • 问题内容: 我正在使用JavaScript测试运行程序“摩卡”。 我的测试失败了,因此我将使用进行调试。 但是运行测试时,没有输出(仅来自Mocha的测试结果)。看来Mocha已捕获并抑制了我的输出! 如何让Mocha显示输出?(对于失败的测试)? 编辑: 抱歉!- 在测试期间可以正常工作!我肯定一直期望它抑制输出,而且我没有正确检查自己的代码。感谢您的回应。所以…话虽如此…也许抑制通过测试的输出

  • 问题内容: 建议使用哪些方法来加快测试速度。 当连接断开或发生超时错误等时,我正在测试具有重试功能的网络库。但是,该库在重试之间使用a (因此在服务器重新启动时它不会连接数千次)。这个电话大大降低了单元测试的速度,我想知道有什么方法可以覆盖它。 请注意,我愿意实际更改代码,或使用模拟框架模拟Thread.sleep(),但想先听听您的意见/建议。 问题答案: 通常将与时间相关的功能委托给单独的组件

  • 问题 假如你正在使用 CoffeeScript 并且想要验证功能是否与预期一致,便可以决定使用 Nodeunit 测试框架。 讨论 Nodeunit 是一种 JavaScript 对于单元测试库( Unit Testing libraries )中 xUnit 族的实现,Java, Python, Ruby, Smalltalk 中均可以使用。 当使用 xUnit 族测试框架时,你需要将所需测试的

  • 问题 假如你正在使用 CoffeeScript 写一个简单地计算器,并且想要验证其功能是否与预期一致。可以使用 Jasmine 测试框架。 讨论 在使用 Jasmine 测试框架时,你要在一个参数(spec)文档中写测试,文档描述的是代码需要测试的预期功能。 例如,我们希望计算器可以实现加法和减法的功能,并且可以正确进行正数和负数的运算。我们的 spec 文档如下列所示。 # calculator

  • 我正在写一个简单的测试用例。我使用作曲家安装了代码欺骗。我的测试用例位于测试用例文件夹内的根文件夹中 当我尝试运行以下代码时 当我尝试在浏览器中运行代码时,我得到以下错误 在我的项目中有一个名为yiisoft\yii2-codecsion\TestCase.php的文件 我做错了什么?有人能帮忙吗。?

  • 我使用数据提供者方法和测试方法(测试方法中带有ITestContext参数)。一个简化的例子如下: 我的Retry类和RetryListener类如下: } 预期:当测试失败时,TestNG调用重试,然后数据提供程序应将相同的值返回给测试方法。 观察到:数据提供者返回相同的值,但测试方法没有运行,重试终止,下一个测试开始(数据提供者现在将返回新值) 但我的重试没有输入测试方法(测试方法不需要(in