Moq на 2 интерфейса с той же функцией - PullRequest
2 голосов
/ 06 сентября 2011

Учитывая 2 интерфейса, имеющих одну общую функцию

public interface I1 { void Foo(string p);};
public interface I2 { void Foo(string p);};

Мы создаем макет обоих интерфейсов, используя moq

Mock<I1> menuServiceMock = new Mock<I1>();
menuServiceMock.As<I2>();

Проблема в том, что при вызове Foo на I2

(menuServiceMock.Object as I2).Foo("foo"); // in real code, we have a handle on I2

Вы не можете проверить это с помощью:

menuServiceMock.Verify(x => x.Foo("foo"), Times.Once());

... потому что считаются только вызовы I1 :: Foo.

Как мы можем преодолеть это (кроме изменения I1 и I2 в фиктивной конструкции)?

1 Ответ

1 голос
/ 06 сентября 2011

Я думаю, вам нужно сделать это:

Mock<I1> menuServiceMock = new Mock<I1>();
var i2Mock = menuServiceMock.As<I2>();

// Verifies that I2.Foo was called on the object
i2Mock.Verify(x => x.Foo("foo"), Times.Once());
// Verifies that I1.Foo was called on the object:
menuServiceMock.Verify(x => x.Foo("foo"), Times.Once());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...