您将如何交换连接字符串以访问测试数据库以进行单元测试?
-
06-07-2019 - |
题
我已经设置了一个测试数据库来开始对我最近添加的应用程序进行单元测试。它是一个3层设计(表示层,BOL和DAL),这是我第一次编写单元测试。
我决定从BOL开始,我认为最好的方法是将ConnectionString(已作为共享字符串传递)替换为指向我的新测试数据库的ConnectionString。但是,我不想更改任何生产代码。我只是希望在单元测试期间以某种方式将应用程序重定向到测试数据库。我怎么能完成这个?
解决方案
我通常做的是创建一个配置部分,其中包含确定要使用哪个连接字符串的功能。
这是一个基本的例子:
static ConfigurationSettings
{
static String ConnectionString
{
get
{
var result = "TESTCONNECTIONSTRING";
if (ConfigurationManager.ConnectionStrings["SOMEKEY"] != null)
result = ConfigurationManager.ConnectionStrings["SOMEKEY"];
return result;
}
}
这样,我不必担心如何连接到系统,您也可以在测试中覆盖此行为,以通过添加setter来实现您想要的效果。
我没有采用多配置文件路由的原因是我在测试套件(例如NUnit testrunner)中运行时无法使用配置文件。
其他提示
您的连接字符串是否来自配置文件?你能在单元测试中设置匹配的配置吗?
将连接字符串保留在配置文件中是一种常见做法。如果你这样做,那么只需在不同的上下文中使用不同的配置文件。
如果您不这样做,也有可能(但您可能需要更改生产代码)。让连接字符串通过构造函数或setter注入。然后,在生产中,您使用生产连接字符串;在测试中,您可以连接到测试数据库。
不隶属于 StackOverflow