Bằng cách sử dụng mô hình cho giao diện.
Giả sử bạn có lớp học của bạn ImplClass
trong đó sử dụng giao diện Finder
và bạn muốn chắc chắn chức năng Search
được gọi với đối số "hello";
vì vậy chúng tôi có:
public interface Finder
{
public string Search(string arg);
}
và
public class ImplClass
{
public ImplClass(Finder finder)
{
...
}
public void doStuff();
}
Sau đó, bạn có thể viết một mô hình cho mã thử nghiệm của bạn
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);
}
}
thì mã kiểm tra:
FinderMock mock = new FinderMock("hello");
ImplClass impl = new ImplClass(mock);
impl.doStuff();
Assert.AreEqual(1, mock.numTimesCalled);
Tính năng này có hoạt động khi Calc không phải là trừu tượng hay giao diện không? Theo như tôi biết 'Moq' làm cho proxy năng động để làm cho mocks của nó không tạo ra các hướng dẫn IL mới để điều này có thể ... – kuskmen