您可以创建一个公共或内部构造函数来依赖AppJobManagement
. 如果可以,请更改对此类接口的引用,因为它可能使测试更容易。
public class ServiceToBeTested : ServiceBase
{
private IAppJobManagement _appJobManagment;
public ServiceToBeTested()
{
_appJobManagment = new AppJobManagement();
}
internal ServiceToBeTested(IAppJobManagement appJobManagment)
{
_appJobManagment = appJobManagment;
}
}
如果ServiceToBeTested
你想模拟/伪造许多受保护的方法,你应该考虑另一个依赖项。例如,而不是:
public void DoSomethingImportant(string foo)
{
if (someCondition)
{
DoThisOneWay(foo);
}
else
{
DoThisDifferently(foo);
}
}
protected void DoThisOneWay(string foo) {}
protected void DoThisDifferently(string foo) {}
您可以使用另一个对象:
public interface IServiceWorker
{
void DoThisOneWay(string foo);
void DoThisDifferently(string foo);
}
public void DoSomethingImportant(string foo)
{
if (someCondition)
{
_worker.DoThisOneWay(foo);
}
else
{
_worker.DoThisDifferently(foo);
}
}
IServiceWorker _worker
很容易被嘲笑。
更新
另一种模式是使用Factory
类来生成这些对象。
public interface IAppJobManagementFactory
{
IAppJobManagement Create(string arg1, int arg2);
}
这也可以嘲笑。