我正在通过EclipseLink使用JPA。在单元测试中,我想测试在一次操作中执行了多少个SQL查询。这样,如果以后的修改导致查询数量激增(例如,如果触发了延迟加载),则单元测试会将其标记为可能需要优化。
我在寻找正确的API来做到这一点。纯JPA解决方案将是理想的选择,但是我可以在单元测试中使用EclipseLink特定的API。我看了看EclipseLink分析器,但是它似乎没有给我一种计算SQL查询数量的方法。
在此先感谢您的帮助!
我没有找到用于这种验证的合适工具,而是创建了自己的工具。它被称为sniffy,可在MIT许可下使用。
您可以声明生成的查询数,如下所示:
// Integrate Sniffy to your test using @Rule annotation and a QueryCounter field @Rule public final QueryCounter queryCounter = new QueryCounter(); // Now just add @Expectation or @Expectations annotations to define number of queries allowed for given method @Test @Expectation(1) public void testJUnitIntegration() throws SQLException { // Just add sniffer: in front of your JDBC connection URL in order to enable sniffer final Connection connection = DriverManager.getConnection("sniffer:jdbc:h2:mem:", "sa", "sa"); // Do not make any changes in your code - just add the @Rule QueryCounter and put annotations on your test method connection.createStatement().execute("SELECT 1 FROM DUAL"); }
有关与JUnit集成的更多信息,请参见项目Wiki。