2016-12-01 58 views
0

我有一种方法。单元测试的最佳做法是什么? 您可以制作一个模拟Connection和ResultSet,并将其作为方法参数作为对象传递,但我发现它是一个愚蠢的,不专业的解决方案。一种主要方法的单元测试

public static void playA() { 
    MyObject object = check("cat"); 
    // some stuff... 
} 

private static MyObject check(String s) throws SQLException { 
    // some stuff checking string 
    MyObject o = methodA(s); 
    // some stuff doing on the object 
    return o; 
} 

private static MyObject methodA(String s) throws SQLException { 
    Connection c = MySettings.getConnection(); 
    PreparedStatement ps = c.prepareStatement("select * from Objects where type = ?"); 
    ps.setString(1, s); 
    ResultSet resultSet = ps.executeQuery(); 
    while (resultSet.next()) { 
     // mapping 
     return object; 
    } 
    return null; 
} 

回答

1

我的意思是,它应该根据您要测试的抽象级别。例如,如果你想检查你的SQL的逻辑,Mocking Connection和ResultSet可以很好。

如果你想成为精确的测试,你可以使用工具进行单元测试数据库像http://dbunit.sourceforge.net/

也可以尝试让你的代码,因为大多数面向对象的尽可能数据库连接层。这会帮助你进行测试(尽管我知道这可能只是一个例子)