Поскольку вы хотите смоделировать класс ресурсов, я предполагаю, что у вас уже есть
interface IResource : IDisposable
{
void DoSomething();
}
class DisposableResource : IResource
{
public void Dispose() { Console.WriteLine("That's it. I'm outta here!"); }
public void DoSomething() { Console.WriteLine("Hard work this"); }
}
Чтобы ввести объект, вам нужен шов .. т.е. GetResource ()
class MyClass
{
protected virtual IResource GetResource()
{
return new DisposableResource();
}
public void MyMethod1()
{
using (IResource r = GetResource())
{
r.DoSomething();
}
}
}
В вашем тестовом коде просто создайте подкласс и переопределите GetResource (), чтобы вернуть макет.
class MySubClassForTest : MyClass
{
protected override IResource GetResource()
{
return new MockResource();
}
}
class MockResource : IResource // or use a mock framework to create one
{
public void DoSomething() { Console.WriteLine("Me work?"); }
public void Dispose() { Console.WriteLine("Disposed Mock!"); }
}
Вот и все.
MyClass obj = new MyClass(); // production code
obj.MyMethod1();
obj = new MySubClassForTest(); // test code
obj.MyMethod1();