在静态方法中创建对象时如何使用依赖注入?



>我有一个类,其中包含多个静态方法,该类正在CLR SQL存储过程方法中使用。我最终用非静态方法编写了一个包装器,它实现了我想要的方法的接口。

我这样做是为了我可以编写一个单元测试。但是,单元测试适用于一个静态方法,该方法还具有另一个依赖项,我不知道如何解决。

注意: CLR 存储过程必须是静态的。

public class MyHelperWrapper : IMyHelper
{
public void DoStuff(List<MyObject> list)
{
MyHelper.DoStuff(list); // Static method that sends data to database.
}
}
public class FakeMyHelperWrapper : IMyHelper
{
public void DoStuff(List<MyObject> list)
{
// don't do anything??
}
}

public class MyCLRClass
{
public static void My_Stored_Proc(string a, string b)
{
MyPrivateStaticMethod(a, b);
}

private static void MyPrivateStaticMethod(string a, string b)
{
List<MyObj> list = new List<MyObject>();
MyObject obj = new MyObject(a, b);
list.Add(obj);
MyHelperWrapper.DoStuff(list); // MyWrapper is wrapped around the static methods of the class MyHelper
}
private static string Format(string b)
{
// ... format ...
return bFormatted;
}
}

归根结底,我想我真的只需要测试该方法是否基于参数 a 和 b 创建一个新对象,然后将其添加到列表中。

我的问题:

  1. 该方法无效,那么测试它的正确方法是什么?只是确保没有错误发生?
  2. 如果我注入假类(例如假的MyHelperWrapper(,那么我基本上绕过了一堆代码。这对我来说似乎很糟糕?
  3. 如果我继续这条路,我怎么能为 MyObject 注入一个假类?这似乎有点糟糕,因为那样我就不会测试对象是否按照我的预期创建。
  4. 有没有更好的方法?也许我也必须重构MyObject才能使用DI,但这一切似乎只是为了测试对象是否被添加到列表中。

我解决这个问题的方法是将依赖项(导致问题(注入 MyObject 的构造函数中。

最新更新