Когда мы можем издеваться над объектом и его методами? - PullRequest
2 голосов
/ 10 мая 2010

Я новичок в Moq и модульном тестировании. Я должен написать модульные тесты для многих классов, которые имеют объекты других классов. Могу ли я издеваться над методами объектов класса. Вот точный сценарий -

У меня есть класс два класса A и B, и у A есть закрытый объект B, и в методе A я внутренне вызываю метод B, а затем выполняю некоторые вычисления и возвращаю результат. Могу ли я издеваться над методом Б в этом сценарии? Пожалуйста, попробуйте дать мне полную информацию об условиях, когда я могу издеваться над методами и функциями класса. Thanx

1 Ответ

1 голос
/ 10 мая 2010

Да, вы можете издеваться над методами Б.

Самый простой способ сделать это, вероятно, передать экземпляр B в конструктор A при его создании.

Таким образом, в своих юнит-тестах вы можете просто создать макет B и вместо этого передать его. Как правило, вы можете легко смоделировать любой объект, который вы передаете или устанавливаете снаружи объекта. Таким образом, все, что передается в конструктор или устанавливается на свойство. Вероятно, можно смоделировать приватные переменные, хотя я не знаю достаточно о Moq, чтобы сказать наверняка, но это часто лучше сделать путем реструктуризации кода, чтобы вместо этого ему передавался зависимый объект.

Если B реализует интерфейс, IB, то вы бы сделали что-то вроде этого:

var mockB = new Mock<IB>();
mockB.Setup(x => x.SomeMethod()).Returns([whatever value you want to return]);
var a = new A(mockB.Object);

Примечание: этот код на C # и из памяти, поэтому может быть неправильным. Это скорее общая идея.

После этого вы можете вызывать свой метод для a, который будет использовать любое значение, которое вы указали в методе Returns в настройке, для выполнения своих вычислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...