java rest test_Java-JAXRS JerseyTest测试REST服务

我已经使用GET,POST,UPDATE和DELETE四种方法创建了Rest服务.

这些方法连接到数据库以检索和存储数据.

现在,我想测试每种方法.我为此使用了Jersey测试框架.只要删除代码,真正对数据库进行调用的代码就可以正常工作.当我留下进行数据库调用的代码时,它抛出了一个异常,即它无法连接到数据库.

编辑:我做了一些研究,并使用了依赖注入.数据库调用移到一个单独的类,但我仍然在做错什么.

DatabaseResults.在此类中,将调用数据库.

public class DatabaseResults {

private final String getQuery = "SELECT * FROM movies";

private Connection connection = null;

private PreparedStatement pstmt = null;

private final ArrayList jsonList = new ArrayList<>();

public JSONObject getAllMovies() throws SQLException {

try {

ComboPooledDataSource dataSource = DatabaseUtility.getDataSource();

connection = dataSource.getConnection();

pstmt = connection.prepareStatement(getQuery);

ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

jsonList.add(new Movie(rs.getString(1), rs.getString(2), rs.getString(4), rs.getString(3)));

}

} catch (SQLException ex) {

System.out.println(ex);

System.out.println("Could not retrieve a connection");

connection.rollback();

} finally {

connection.close();

}

JSONObject jsonObject = new JSONObject();

jsonObject.put("movies", jsonList);

return jsonObject;

}

}

包含REST方法的MoviesResource

@Path("movies")

public class MoviesResource {

....

private DatabaseResults dbResults = null;

public MoviesResource() {

this(new DatabaseResults());

}

MoviesResource(DatabaseResults dbr){

this.dbResults = dbr;

}

....

@GET

@Produces(MediaType.APPLICATION_JSON)

public Response getAllMovies() throws JSONException, SQLException {

return Response.status(200).entity(dbResults.getAllMovies().toString()).build();

}

测试班

@RunWith(MockitoJUnit44Runner.class)

public class MovieResourceTest extends JerseyTest {

JSONObject jsonObject = new JSONObject();

@Mock

DatabaseResults dbr;

@Before

public void setup() throws SQLException{

jsonObject.put("id", "hello");

when(dbr.getAllMovies()).thenReturn(jsonObject);

}

Client client = ClientBuilder.newClient();

WebTarget target = client

.target("http://localhost:9998/RestServiceMovies/resources");

@Override

protected Application configure() {

return new ResourceConfig(MoviesResource.class);

}

@Test

public void getAllMoviesTest() throws SQLException {

String responseGetAllMovies = target("/movies").request().get(String.class);

Assert.assertTrue("hello".equals(responseGetAllMovies));

}

目前,我可以运行测试,但是当我测试getAllMovies()方法时,它会调用真实数据库,而不是返回jsonObject.

我感觉到模拟对象和MovieResource类的构造函数之间缺少连接?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值