Используя макет для интерфейса.
Допустим, у вас есть класс ImplClass
, который использует интерфейс Finder
, и вы хотите, чтобы функция Search
вызывалась с аргументом "hello";
так что имеем:
public interface Finder
{
public string Search(string arg);
}
и
public class ImplClass
{
public ImplClass(Finder finder)
{
...
}
public void doStuff();
}
Тогда вы можете написать макет для вашего тестового кода
private class FinderMock : Finder
{
public int numTimesCalled = 0;
string expected;
public FinderMock(string expected)
{
this.expected = expected;
}
public string Search(string arg)
{
numTimesCalled++;
Assert.AreEqual(expected, arg);
}
}
затем тестовый код:
FinderMock mock = new FinderMock("hello");
ImplClass impl = new ImplClass(mock);
impl.doStuff();
Assert.AreEqual(1, mock.numTimesCalled);