在静态方法中创建对象时如何使用依赖注入?
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 创建了一个新对象,然后将其添加到列表中。
我的问题:
- 该方法无效,那么测试它的正确方法是什么?只要确保没有错误发生即可?
- 如果我注入的是伪造的 classes(例如伪造的 MyHelperWrapper),那么我基本上是在绕过一堆代码。这对我来说似乎很糟糕?
- 如果我继续这条路线,我怎样才能为 MyObject 注入一个假的 class?这似乎有点糟糕,因为那时我没有测试对象是否按我期望的方式创建。
- 有没有更好的方法?也许我还必须重构 MyObject 以使用 DI,但这一切似乎只是为了测试对象是否已添加到列表中。
我解决这个问题的方法是将依赖项(导致问题的)注入到 MyObject 的构造函数中。
我有一个 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 创建了一个新对象,然后将其添加到列表中。
我的问题:
- 该方法无效,那么测试它的正确方法是什么?只要确保没有错误发生即可?
- 如果我注入的是伪造的 classes(例如伪造的 MyHelperWrapper),那么我基本上是在绕过一堆代码。这对我来说似乎很糟糕?
- 如果我继续这条路线,我怎样才能为 MyObject 注入一个假的 class?这似乎有点糟糕,因为那时我没有测试对象是否按我期望的方式创建。
- 有没有更好的方法?也许我还必须重构 MyObject 以使用 DI,但这一切似乎只是为了测试对象是否已添加到列表中。
我解决这个问题的方法是将依赖项(导致问题的)注入到 MyObject 的构造函数中。