如何模拟返回void的方法,但修改了使用Moq传入的引用类型

时间:2013-02-02 14:35:07

标签: c# unit-testing moq

我有Interface

public interface IRequester
{
    void Check(Check check);
}

我想使用Moq来模拟它,这显然很容易。我遇到的问题是我希望在模拟调用之后修改传递的Check(因为它是一个引用)。正如您所看到的,Check只是一个简单的POCO。

public class Check
{
    public string Url { get; set; }
    public int Status { get; set; }
}

理想情况下,我想更改传递的StatusCheck属性的值。

这可能吗?

2 个答案:

答案 0 :(得分:15)

使用Callback方法。我认为这将是:

yourMock.Setup(x => x.Check(It.IsAny<Check>()))
    .Callback((Check c) => { c.Status = 1234567; });

如果您只需要一个作业,则可以省略大括号{ }和第一个分号;

答案 1 :(得分:0)

认为你可以使用ref关键字来获得你想要的东西:

  

方法参数上的ref方法参数关键字会导致方法   引用传递给方法的相同变量。任何   对方法中的参数所做的更改将反映在该方法中   当控制传递回调用方法时变量。

http://msdn.microsoft.com/en-us/library/14akc2c7(v=vs.71).aspx