我有一个类正在尝试对其进行单元测试。该类是 WCF 服务类。 (让它成为泛型类不是我的目标。)
我有一个在许多方法中实例化的数据访问层 (DAL) 类型(称为 UserDAL)。要测试这些方法,我需要模拟这个局部变量。 (UserDAL 的每个实例中都有特定于方法的值,因此将其更改为类级别变量会导致代码困惑,因此我宁愿不这样做。)
我认为最好是重载构造函数并传入一个类型以在本地方法中使用。空参数构造函数仍将创建一个普通的 UserDAL,但重载的构造函数将具有实现 IUserDAL 的模拟类型。
我不确定要传递类型的语法。请注意,我不是要传递一个变量,而是一个类型。
例子:
public class MyWCFClass: IMyWCFClass
{
private TypeParam _myUserDALType;
public MyWCFClass()
{
_myUserDALType = UserDAL;
}
public MyWCFClass(TypeParam myUserDALType)
{
_myUserDALType = myUserDALType;
}
//methods to use it
public MyMethod()
{
IUserDAL userDAL = new _myUserDALType();
//Call method in IUserDAL
userDAL.CreateUser();
}
// Several similar methods that all need a different UserDAL go here
.....
}
所以,我不知道 TypeParam 是什么类型(我编的),或者这种想法是否可能。
如果您有一个非泛型解决方案,那就太好了。
最佳答案
您真正需要的是依赖注入(inject),但您可以通过传入类型参数然后在需要时使用 Activator.CreateInstance(Type) 创建对象来实现。
至于做真正的 DI(这将使做这个测试更容易),我知道 Spring.Net工作得很好。
关于C# - 构造函数中的类型参数 - 无泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1849733/