繁体   English   中英

C#为什么单元测试会有这种奇怪的行为?

[英]C# why unit test has this strange behaviour?

我有一个用于加密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。 它适用于产品,但不能用于单元测试。 不知道为什么。 有人可以向我解释吗?

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

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

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

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

在您的代码中,您只需调用

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

在单元测试中,您只需定义特定测试的connectionString。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM