Пример использования Moq с использованием ref - PullRequest
7 голосов
/ 15 июня 2010

Я пытаюсь создать тест для какого-то устаревшего метода, который реализует параметры.Не могли бы вы привести пример, как это сделать?

Ответы [ 3 ]

20 голосов
/ 15 июня 2010

Просто назначьте из теста параметр out или ref.

Для данного интерфейса:

public interface ILegacy
{
    bool Foo(out string bar);
}

Вы можете написать тест следующим образом:

[TestMethod]
public void Test13()
{
    string bar = "ploeh";

    var legacyStub = new Mock<ILegacy>();
    legacyStub.Setup(l => l.Foo(out bar))
        .Returns(true);

    Assert.IsTrue(legacyStub.Object.Foo(out bar));
    Assert.AreEqual("ploeh", bar);
}
2 голосов
/ 15 июня 2010

Что-то не так со вторым примером в верхней части https://github.com/moq/moq4/wiki/Quickstart?Вы действительно должны приводить примеры того, что вы пытаетесь сделать, если вы не собираетесь искать такие вещи.

1 голос
/ 04 марта 2014

Между прочим, если вы хотите использовать moq (в настоящее время), чтобы также смоделировать параметр out, вам также придется выполнить следующий прыжок в виде пялец. Допустим, вы хотели смоделировать параметр out, который возвратил другой смоделированный объект, например,

var mockServiceA = new Mock<IMyService>();
var mockServiceOutput = new Mock<IMyServiceOutput>();

// This will not work...
mockServiceA.Setup(svc => svc.DoSomething(out mockServiceOutput.Object));

// To have this work you have to do the following
IMyServiceOutput castOutput = mockServiceOutput.Object;
mockServiceA.Setup(svc => svc.DoSomething(out castOutput));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...