【问题标题】:Unit-testing a rest-API written in xml对用 xml 编写的 rest-API 进行单元测试
【发布时间】:2016-05-21 17:39:34
【问题描述】:

我是 web 开发和 java 的新手。我已经使用 xml 开发了这个 rest-api,它运行良好(NetBeans)。但是,我需要对其进行单元测试。有人可以指导我吗?

提前致谢

@Path("/users")
public class users{
    String host=HelperClass.host;
    String uName=HelperClass.uName;
    String pass=HelperClass.pass;
    Connection con;

/**
 * Gets all the users in the database with the password.
 * @return
 * @throws SQLException 
 */
@GET
@Path("/getusers")
@Produces(MediaType.APPLICATION_XML)
public UserList getAllUsers() throws SQLException {
    UserList users;
    try
    {            
        con=DriverManager.getConnection(host, uName, pass);
        Statement stmt=con.createStatement();
        String Sql="SELECT * FROM USERS";
        ResultSet rs=stmt.executeQuery(Sql);
        users=new UserList();
        users.setUsers(new ArrayList<Users>());

        while(rs.next())
        {
            Users newuser=new Users();
            newuser.setUsername(rs.getString("username"));
            newuser.setPassword(rs.getString("password"));
            users.getUsers().add(newuser);

        }
    }
    catch(Exception ex)
    {
        users=new UserList();

    }
    finally
    {
        con.close();
    }
    return users;
}

/**
 * Gets the specific user in the database.
 * @param userId
 * @return
 * @throws SQLException 
 */
@GET
@Path("/getuser/{userId}")
@Produces(MediaType.APPLICATION_XML)
public Users getUser(@PathParam("userId") String userId) throws SQLException
{
    Users user;
    try
    {
        con=DriverManager.getConnection(host, uName, pass);
        Statement stmt=con.createStatement();
        String Sql="SELECT * FROM USERS where USERNAME='"+userId+"'";
        ResultSet rs=stmt.executeQuery(Sql);
        user=new Users();

         while(rs.next())
        {
            user.setUsername(rs.getString("username"));
            user.setPassword(rs.getString("password"));                
        }
    }
    catch(Exception ex)
    {
        user=new Users();
    }
    finally
    {
        con.close();
    }
    return user;
}

@POST
@Path("/setuser")
@Consumes({MediaType.APPLICATION_XML})
@Produces({MediaType.TEXT_PLAIN})
public String setUser(Users user) throws SQLException
{
    try
    {
        con=DriverManager.getConnection(host, uName, pass);
        Statement stmt=con.createStatement();
        String Sql="INSERT INTO USERS VALUES('"+user.getUsername()+"','"+user.getPassword()+"')";
        stmt.executeUpdate(Sql);
    }
    catch(Exception ex)
    {
        return "error";
    }
    finally
    {
        con.close();
    }
    return "done";
}

@DELETE
@Path("/deleteuser/{userId}")
@Produces({MediaType.TEXT_PLAIN})
public String deleteUser(@PathParam("userId") String userId) throws SQLException
{
    try
    {
        con=DriverManager.getConnection(host, uName, pass);
        Statement stmt=con.createStatement();            


        String Sql="Delete from replies where REPLY_ID='"+userId+"'";
        stmt.executeUpdate(Sql);

         Sql="Delete from comments where USER_ID='"+userId+"'";
        stmt.executeUpdate(Sql);

        Sql="Delete from USERINFO where USERINFO_ID='"+userId+"'";
        stmt.executeUpdate(Sql);



        Sql="Delete from USERS where USERNAME='"+userId+"'";
        stmt.executeUpdate(Sql);
    }
    catch(Exception ex)
    {
        return "error";
    }
    finally
    {
        con.close();
    }
    return "done";
}

}

【问题讨论】:

    标签: java xml rest unit-testing


    【解决方案1】:

    有两种方法可以测试您的其余 API:

    1> 直接调用你的 Junits 中的方法并验证结果

    2> 使用 http GET/POST 方法调用您的 API 并验证响应。

    使用 http get 方法调用 API,您可以参考以下示例:

    String url = "http://www.google.com/search?q=httpClient";
    
    HttpClient client = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet(url);
    
    // add request header
    request.addHeader("User-Agent", USER_AGENT);
    HttpResponse response = client.execute(request);
    
    System.out.println("Response Code : " 
                + response.getStatusLine().getStatusCode());
    
    BufferedReader rd = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent()));
    
    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }
    

    其他例子请看http://www.mkyong.com/java/apache-httpclient-examples/

    谢谢。

    【讨论】:

    • 你能给我一个在 Junit 中调用它的例子吗?而且,第二种方法是单元测试方法吗?谢谢。
    • 您的答案中没有关于编写在容器中运行 JAX-RS 应用程序并针对它执行 HTTP 请求的单元测试。
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2013-07-15
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2018-03-19
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多