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

9

我有一个接口

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

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

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

理想情况下,我希望更改传入的Check上的Status属性的值。 这个可能吗?
2个回答

19

使用 Callback 方法。我认为它会是这样的:

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

如果你只需要一个赋值语句,那么可以省略大括号 { } 和第一个分号 ;


好问题和好答案!这非常有帮助,谢谢。 - Louis

0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接