Если вы ответите на вопрос, который вы пишете, вы можете просто предоставить аргументы, как предложено в этой теме:
var mockObject = new Mock<Foo>(MockBehaviour.Default, FooParameters);
mockObject.Setup(x=>x.func2(a,b,c)).Returns(d);
mockobject.Object.func1();
Однако это не очень хорошая идея.Обычно вы не должны издеваться над тестируемой системой.Это может указывать на то, что ваш класс делает слишком много и нуждается в реструктуризации, чтобы сделать ровно одну единственную вещь.
Однако могут быть ситуации, когда у класса есть несколько членов API, которые зависят друг от друга.,Подумайте о цепочке перегрузок, где вы хотите протестировать множественные перегрузки.Конечно, легко написать тест для самой внутренней перегрузки (с большинством параметров).Однако, если вы хотите проверить, правильно ли установлены другие перегрузки для самого внутреннего параметра, вы действительно застряли.
void DoSomething()
{
var param = ...
DoSomething(param);
}
void DoSomething(int p)
{
// the most inner overload
}
Не существует общего правила, как решить эту зависимость.В этих случаях я стараюсь создавать подклассы для моей тестируемой системы и переопределять ее (virtual
) элементы пустым телом - это то же самое, что и MOQ для внутреннего использования.