我到处搜索,但我发现的任何内容都不适用于我目前的情况。
我有一个帮助DB连接的类,我需要对它的一些方法进行单元测试:
public class DBHelper
{
private SqlConnection conn;
private SqlCommand textCommand;
public DBHelper(IDbConnection connection)
{
conn = (SqlConnection)connection;
textCommand = new SqlCommand();
textCommand.Connection = conn;
}
public SqlConnection Conn
{
get
{
return conn;
}
set
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
conn = (SqlConnection)value;
textCommand = new SqlCommand();
textCommand.Connection = conn;
textCommand.CommandType = CommandType.Text;
}
}
public object QueryScalar(string query)
{
textCommand.CommandText = query;
string qtype = query.Substring(0, 6).ToLower();
if (qtype == "select")
return textCommand.ExecuteScalar();
return textCommand.ExecuteNonQuery();
}
}
我知道我不应该从测试中访问数据库。我尝试使用模拟对象,但我认为他们不能在这里提供帮助,因为我不能从课堂外改变textCommand
。我尝试设置SQLite数据库并通过SQL访问它,但无济于事。
我的问题是:如何对QueryScalar方法进行单元测试?
感谢您的任何想法。
答案 0 :(得分:0)
也许你可以在课堂上使用这样的东西......
private IScalarQuerier _scalarQueryer;
public DBHelper(IDbConnection connection, IScalarQuerier q)
{
_scalarQuerier = q;
conn = (SqlConnection)connection;
textCommand = new SqlCommand();
textCommand.Connection = conn;
}
...然后将QueryScalar
方法放在一个单独的类中,您可以在其中执行/测试您想要的任何内容。只需让该类实现一个接口IScalarQuerier
,就可以将其传递给DBHelper
。
可能不是你想要的,但这应该让你用你想要测试的方法做你需要的。
旁注:然后,当您将该类(或IScalarQuerier
- 实现,确切地说)传递到DBHelper
时,您应该简单地假设查询器已在外部测试过DBHelper
的范围,因此可以信任它正常工作。