Удаление параметров с уже существующими значениями в FakeItEasy - PullRequest
5 голосов
/ 25 января 2012

Это немного странно. Я пытаюсь заглушить метод, у которого есть параметры, мне все равно, какие параметры, поэтому я игнорирую аргументы. Это выглядит так:

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .Returns(something);

Это работает без проблем, когда метод-заглушка вызывается так:

List<Foo> target;
var result = service.Method(out target);

Однако, это не работает, когда target предварительно инициализирован. Например:

List<Foo> target = new List<Foo>();
var result = service.Method(out target);

Когда я проверяю Tag на фальшивке, я вижу, что параметры out записываются как <NULL>, поэтому я подозреваю, что они не совпадают, когда цель out уже установлена ​​на что-то. Я попытался установить ignored в моем тесте на new List<Foo>(), а также попытался A<List<Foo>>.Ignored, но ни один из них не повлиял на результат.

Так что мой вопрос: кто-нибудь знает, как заглушить метод без параметров, если у цели параметра out уже есть значение?

1 Ответ

5 голосов
/ 25 января 2012

Обновление: начиная с FakeItEasy 1.23.0 начальное значение out параметров игнорируется при сопоставлении, поэтому нет необходимости в WithAnyArguments

, пять минут спустя и я нашел приемлемое решение (в этом сценарии). Поскольку мне не интересно, какие аргументы передаются этому методу, поэтому, если я использую метод WithAnyArguments(), то, похоже, он работает; это должно быть связано с проверкой аргументов все вместе, я думаю.

Окончательный код:

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .WithAnyArguments()
  .Returns(something);

Это, очевидно, не решит проблему, если я не хочу игнорировать все аргументы. Я приму этот ответ, только если у кого-то нет более изощренного решения.

...