我对模拟和伪造的测试类型有一些疑问。由于我在这个领域非常新,我遇到的问题是我有一个方法cald MarkAnalyze,其语法如下。
public static void MarkDataAnalyzed()
{
object uniqueId = db.ExecuteScaler("SELECT MAX(SUBSTR(UniqueID,3)) FROM History where year(date) = year(date())");
string maxUniqueID = uniqueId == null ? "0" : uniqueId.ToString();
Utilities.UpdateConfig(Constants.CONFIG_LAST_UNIQUE_ID, maxUniqueID);
Utilities.Log("Data will now be analyzed beyond Unique ID: " + maxUniqueID, LogType.Information);
}
现在,如果你看到这个方法,那么我正在使用db.ExecuteScaler方法并将查询作为参数传递(我不确定它是否正确的编码方式。)我不想改变方法代码。实际上这段代码是单独的dll。我想测试或者我们可以说模拟db对象或MarkDataAnalyze方法,并希望在MarkDataAnalyzed方法中控制ExecuteScaler方法的返回值。就像我想测试MarkDataAnalyzed方法的行为一样,当ExecuteScaler返回单个值,null或任何其他东西时它的行为。
这是我的问题。我不知道我能否以正确的方式表达我的问题,但相信我,我努力在这些陈述中表达它,以便你的专家能够理解它。
我还使用.NET Framework 3.5和C#语言作为编程工具和Visual Studio 2013编辑器。因此,如果您建议使用任何库,则应该与这些框架兼容。
FoxProDb.cs文件的代码。
public class FoxProDB : IDatabase
{
OdbcConnection conn = null;
public FoxProDB()
{
string InstallPath = GetInstallPath();
conn = new OdbcConnection(@"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + InstallPath + ";");
}
public OdbcDataReader ExecuteReader(string sqlQuery)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
using (OdbcCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sqlQuery;
OdbcDataReader reader = cmd.ExecuteReader();
return reader;
}
}
public object ExecuteScaler(string sqlQuery)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
using (OdbcCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sqlQuery;
object returnVal = cmd.ExecuteScalar();
return returnVal;
}
}
public int ExecuteNonQuery(string sqlQuery)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
using (OdbcCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sqlQuery;
int rowsModified = cmd.ExecuteNonQuery();
return rowsModified;
}
}
public void Close()
{
try {
conn.Close();
}
catch{
//do nothing
}
}
private string GetInstallPath()
{
if (String.IsNullOrEmpty(installPath))
{
throw new Exception("");
}
return installPath;
}
public void Open()
{
//Need to implement it latter.
throw new NotImplementedException();
}
DataTable IDatabase.ExecuteReader(string sqlQuery)
{
//Could be modified latter.
throw new NotImplementedException();
}
string IDatabase.ExecuteScaler(string sqlQuery)
{
//Could be modified latter.
throw new NotImplementedException();
}
}