在单元测试/开发和桌面应用程序中使用不同连接字符串的最佳实践



我正在开发一个C#桌面应用程序,并为它创建了一些单元测试。

我正在使用在设置中的静态变量中设置的连接字符串.cs:

    class Settings
    {
        public static readonly string UserID = "myName";
        public static readonly string Password = "pass1";
        public static readonly string Server = "server1";
        public static readonly string Database = "db1";
        public static readonly string Timeout = "30";
        //public static readonly string ConnectionString = "User ID=" + Settings.UserID + 
        //                                                 ";Password=" + Settings.Password + 
        //                                                 ";Server=" + Settings.Server + 
        //                                                 ";Database=" + Settings.Database + 
        //                                                 ";Connection Timeout=" + Settings.Timeout;
        public static readonly string ConnectionString = "context connection=true";
    }

您可以在此处看到我在做什么 - 我有一个用于开发(注释掉)的字符串,另一个在部署到实时系统时使用。

不得不评论和取消注释这些是非常令人恼火的。ASP.NET 我可以使用配置文件并根据调试/部署转换连接字符串,但在桌面应用程序中,我认为没有这样的功能。

有没有更好的方法来做我已经在做的事情?

你可以使用

#if DEBUG
//code when in debug mode
#else
//code when not in debug (Release, for instance)
#endif

正如您所说,这通常最好通过检查文件中的设置来处理。 有关如何在各种应用程序类型中执行此操作的详细信息,请参阅此处。您可以滚动自己的配置文件作为替代方法,并使用StreamReader来读取它。这种事情的一个例子是Bethesda的两个主要特许经营权TES和Fallout的配置文件。 XML是大多数人的做法,但对于简单的设置,您可以使用文本文件。 这样做,您可以切换调试模式而无需重新编译。

还有用于桌面应用程序的配置文件app.config。您可以参考这篇文章,了解如何从您的配置中读取应用程序设置。您可能需要添加对"系统配置"程序集的引用。

加密连接字符串中的密码等敏感信息也是一种很好的做法。这是一份关于此的 MSDN 文档。

最新更新