我有一个方法调用另一个方法来检索数据并将其插入到数据库中,如何在Junit中测试此方法,因为此方法没有检索任何内容?任何人都可以提供一些这种情况的例子吗?
public static void method(){
User user = getUser();
try {
String Query = "INSERT INTO users (USER_ID , Name) VALUES ("
+user.getID()+","+user.getName()+")";
Statement statement = conn.createStatement();
statement.executeUpdate(Query);
} catch (Exception e) {
e.printStackTrace();
}
}
我在考虑为用户使用模拟对象,但我不知道如何检查用户是否插入到数据库中。请帮忙。
答案 0 :(得分:1)
这里有一些指针,但在此之前,您必须确定测试中的代码是什么。我说这个的原因是因为这实际上会让你重构你的代码。
例如,对于以下代码:
public static void method(){
User user = getUser();
try {
String query = "INSERT INTO users (USER_ID , Name) VALUES ("
+user.getID()+","+user.getName()+")";
Statement statement = conn.createStatement();
statement.executeUpdate(query);
} catch (Exception e) {
e.printStackTrace();
}
}
你可能想测试以下内容: -
是否正确创建了查询字符串,即预期的有效SQL?
该方法是否应该抛出异常,因为我们想捕获所有已检查的异常?
工作完成后,所有资源都会关闭?例如在您的方法连接中打开但从未关闭。
现在出于以上几点,可能会有一些重要性更高的点,例如确保查询正确构建。
因此,为此,应该从此方法中提取查询构建器代码,现在您可以在单独的单元测试中轻松测试此查询。
同样,您希望确保在作业完成后关闭连接。因此,您可能希望将此代码提取到接受查询作为参数的方法,打开连接,执行DB CRUD关闭连接并返回输出。并确保您不会一直以不同的方法重复此代码。
现在,让我们转到指针: -
答案 1 :(得分:0)
应根据预期的行为对类进行测试
在这里测试返回类型(即使它有void
的其他东西)是没有意义的。
您的方法执行SQL查询 因此,您的单元测试必须声明对数据库的预期副作用:具有预期值的插入 请注意,要进行可重复且快速的测试,您应该支持嵌入式数据库进行单元测试。