我有一个课程,我正在尝试进行单元测试.该类是WCF服务类.(将它作为泛型类不是我的目标.)
我有一个数据访问层(DAL)类型(称为UserDAL),它在许多方法中实例化.为了使这些方法得到测试,我需要模拟这个局部变量.(UserDAL的每个实例都有特定于方法的值,因此将其更改为类级变量会导致代码混乱,所以我宁愿不这样做.)
我认为很好的是重载构造函数并传入一个类型以在本地方法中使用.空param构造函数仍然会创建一个普通的UserDAL,但是重载的那个将有一个实现IUserDAL的mock类型.
我不确定语法是否要传递一个类型.请注意,我不是要传递变量,而是传递类型.
例:
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
.....
}
Run Code Online (Sandbox Code Playgroud)
所以,我不知道TypeParam是什么类型的(我做了那个)或者这种想法是否可能.
如果你有一个非常规的非泛型解决方案.
您真正需要的是依赖注入,但您可以通过传入Type参数然后使用Activator.CreateInstance(Type)在需要时创建对象来完成此操作.
至于做真正的DI(这将使这个测试更容易),我知道Spring.Net工作得很好.
使用Type,并使用Activator.CreateInstance实例化它:
private Type _myUserDALType;
IUserDAL userDAL = Activator.CreateInstance(_myUserDALType) as IUserDAL;
Run Code Online (Sandbox Code Playgroud)
你的意思是Type,Activator.CreateInstance用来创建实例:
public class MyWCFClass: IMyWCFClass
{
private Type _myUserDALType;
public MyWCFClass()
{
_myUserDALType = typeof(UserDAL);
}
public MyWCFClass(Type myUserDALType)
{
_myUserDALType = myUserDALType;
}
//methods to use it
public void MyMethod()
{
IUserDAL userDAL = (IUserDAL) Activator.CreateInstance(_myUserDALType );
//Call method in IUserDAL
userDAL.CreateUser();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2648 次 |
| 最近记录: |