我有一个类来加密connectionString。
public class SKM
{
private string connStrName = "AndeDBEntities";
internal void encryptConnStr()
{
if(isConnStrEncrypted())
return;
...
}
private bool isConnStrEncrypted()
{
bool status = false;
// Open app.config of executable.
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Get the connection string from the app.config file.
string connStr = config.ConnectionStrings.ConnectionStrings[connStrName].ConnectionString;
status = !(connStr.Contains("provider"));
Log.logItem(LogType.DebugDevelopment, "isConnStrEncrypted", "SKM::isConnStrEncrypted()", "isConnStrEncrypted=" + status);
return status;
}
}
以上代码在我的应用程序中运行良好。但不是我的单元测试项目。
在我的单元测试项目中,我测试了encryptConnStr()
方法。它将调用isConnStrEncrypted()
方法。然后将在此行抛出异常(空指针):
string connStr = config.ConnectionStrings.ConnectionStrings[connStrName].ConnectionString;
我必须使用这样的索引来传递单元测试:
string connStr = config.ConnectionStrings.ConnectionStrings[0].ConnectionString;
我记得几天前我加入了上面的单元测试。但现在它给了我一个错误。单元测试尚未与我们的每日自动构建集成。我们只有一个connectionStr。它适用于产品,但不适用于单元测试。不知道为什么。有人可以向我解释一下吗?
答案 0 :(得分:1)
单元测试项目使用自己的配置文件。连接字符串是否也存在于该文件中?
答案 1 :(得分:0)
config.ConnectionStrings
通常会尝试读取执行此代码的进程的app / web.config文件。因此,您可能需要在单元测试项目中添加包含连接字符串的app.config
文件。
答案 2 :(得分:0)
我个人建议将你的加密测试方法分成更通用的IsStringEncrypted。
通过这种方式,您可以测试加密方法,而无需担心数据库,连接字符串或web / app.configs。
在您的代码中,您只需致电
String connectionString = GetConnectionStringFromAppConfig(); SKM.IsStringEncrypted(的connectionString);
在单元测试中,您只需为该特定测试定义connectionString。