我有一套端到端测试测试套件。它们应该在SQL语句,错误的表或列名称(DB模式和Java代码不同意的任何内容)或缺少数据库权限时捕获拼写错误。我不想依赖数据库中的数据(设置太复杂);这只是一个基本的测试。
import java.sql.*;
import org.junit.Test;
public class TypoTest {
private Connection getConnection() throws Exception {
String connectionString = "jdbc:postgresql://127.0.0.1:5432/db";
String driverClassName = "org.postgresql.ds.PGConnectionPoolDataSource";
Class.forName(driverClassName).newInstance();
return DriverManager.getConnection(connectionString, "robert", "");
}
@Test
public void runQuery() throws Exception {
try (Connection connection = getConnection();
PreparedStatement ps = connection.prepareStatement("SELECT relname FROM pg_catalog.pg_class");
ResultSet data = ps.executeQuery()) {
while (data.next()) {
data.getString("relname");
}
}
}
}
当我运行上述测试时,如果SELECT
语句中有拼写错误,则会失败。 (好。)如果data.getString("typo here")
中的列名中有拼写错误,如果查询的表没有数据,则不会被捕获,因为从未输入循环。为了简化测试(设置),我不想先将数据插入到我的表中。
我想我可以将列名称设置为常量并将DRY设置为代码并解决问题。
但是,我想知道是否有更简单的方法...我很懒,不想编辑我的所有查询。有没有更好的方法来对我的SQL进行单元测试?
我正在使用Postgres 9.5和JDBC 4。
答案 0 :(得分:1)
我猜你已经have the answer you seek但是为了回答,你可以尝试使用select * from table
$myValues = array('Austin Metro','Central Austin','Georgetown');
$myIds = array('3','4','5');
if (isset($_POST['checkbox_list']) && array_search($_POST['checkbox_list'], $myValues) !== false)
{
$index = array_search($_POST['checkbox_list'], $myValues);
$indeed_mail->indeed_wysija_subscribe( $myIds[$index], $email );
}
,然后根据你的查询检查列名(你&#39} ; d我必须解析查询字符串...)。
我相信它也适用于空表,但请注意我没有测试过空表的情况。