2010-06-10 123 views
1

我有一个类来加密connectionString。C#为什么单元测试有这种奇怪的行为?

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。它适用于产品,但不适用于单元测试。不知道为什么。任何人都可以向我解释?

回答

1

单元测试项目使用自己的配置文件。连接字符串是否也存在于该文件中?

0

config.ConnectionStrings通常会尝试读取执行此代码的进程的app/web.config文件。因此,您可能需要在单元测试项目中添加包含连接字符串的文件app.config

0

我个人建议将加密测试方法分成更通用的IsStringEncrypted。

这样你就可以测试加密方法而不必担心数据库,连接字符串或web/app.configs。

在你的代码,你只需拨打

字符串的connectionString = GetConnectionStringFromAppConfig(); SKM.IsStringEncrypted(connectionString);

在你的单元测试中,你只需定义什么connectionString将是特定的测试。

相关问题