我正在C#中为两个项目构建一个类库。此类库与SQLServer数据库建立了很多连接。
由于此库仅从SQLServer数据库中检索数据,因此有一个静态类负责加载连接设置并将其打开。然后,库的类接收执行查询所需的数据并返回结果。所有这些都是使用静态方法完成的。
像这样。
internal static class DBConnection
{
private const String connectionString = "some connection string";
public static SqlConnection open() { /* ... open the connection ... */ }
}
public static class DataXRetriever
{
public static List<DataX> RetrieveById(Int32[] ids)
{
using (SqlConnection connection = DBConnection.open())
{
/* ... do a query ... */
/* ... do something with the result of the query ... */
/* ... return it ... */
}
}
/* ... some other static methods ... */
}
我想为这些方法创建一个测试单元,而不需要连接到数据库,我一直在读这可以完成实例化包含连接的类并将其提供给类使用它,但我的设计并不像那样。
答案 0 :(得分:1)
您可以允许代码修改连接字符串而不是使其成为静态,然后让单元测试设置代码在运行测试之前更改其值。 (更新:第二个想法,对于你想要做的具体事情,即使那样也不会真的有效。)
但正确的方法是针对注入到您的类中的接口进行编程,以便可以根据具体情况轻松模拟它们。
换句话说,如果您的设计“不能像那样工作”,那么您的设计是错误的,需要进行更改。