对于我的集成测试,我构建了通用验证类,其中包含
等方法public void countcheck(table1, table 2){ // makes a JDBC connection and run the query to check counts and then closes the connection };
public void nullcheck(Table, ColumnName) {// makes a JDBC connection and the run query to make sure there are no Nulls and then closes the connection );
等等。 我将这些常见的验证方法分发为集成测试人员的Jars。我的困境是我是否应该为每种方法打开和关闭连接,我不希望测试人员担心打开和关闭连接,只是担心调用验证方法。我正在寻找替代设计,或者这是足够好的东西。我担心的是,如果在测试套件中有10个测试,那么将有10个连接进行和关闭,这可能不是一个好兆头?我希望测试人员担心makig和关闭连接。它是基于Junit的测试框架,DB是Oracle。
答案 0 :(得分:0)
您不应该“处理”关于将DB连接处理到代码中的决定。相反,您应该将此决定推迟到部署框架的人员。
如果他们决定重用连接,他们可以configure connection pool为此;如果他们决定每次都打开和关闭连接,他们可以在没有连接池的情况下配置框架。
您的任务减少为向他们提供支持技术。
答案 1 :(得分:0)
我通常会将DataSource
传递给此类对象(构造函数)并获取每个业务方法的连接。在独立模式下,这可能意味着它没有使用正确的池,但是当你只执行一些没有问题的语句时。
在制作中,您可以传入真正的游泳池。保持数据源而不是连接的优点是,此方案具有更好的自我修复功能并减少活动连接的数量。 (在测试场景中可能不是那么重要,但whynot通常有可用的验证器。)
Validator(DataSource ds) {
this.ds = ds;
}
validate(String val, ...) {
try (Connection c = ds.getConnection()) {
...
}
}
大多数驱动程序都有本机DataSource,但您也可以使用一个将getConnection()实现为return DriverManager.getConnection(url);
的泛型。它也是一个容易模拟的小界面。
如果您的测试变得更大,则使用简单的池化数据源,例如Apache Commons DBCP DriverAdapterCPDS
中的数据源。