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

How can you use dependency injection when creating an object inside of a static method?

我有一个 class,其中有几个静态方法正在 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. 如果我注入的是伪造的 classes(例如伪造的 MyHelperWrapper),那么我基本上是在绕过一堆代码。这对我来说似乎很糟糕?
  3. 如果我继续这条路线,我怎样才能为 MyObject 注入一个假的 class?这似乎有点糟糕,因为那时我没有测试对象是否按我期望的方式创建。
  4. 有没有更好的方法?也许我还必须重构 MyObject 以使用 DI,但这一切似乎只是为了测试对象是否已添加到列表中。

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