Moq使用Mock.of返回对象的值?

时间:2014-07-10 16:04:29

标签: c# unit-testing moq

我需要模拟对象中方法的返回值。我有这样的事情:

var mock = Mock.Of<IExample>( x => x.GetAll() == new List<IOtherExample>()) ;

但是我收到了错误。如果我使用GetAll作为属性,它可以工作:

var mock = Mock.Of<IExample>( x => x.GetAll == new List<IOtherExample>()) ;

我知道我可以使用新的Mock,Setup和Return这样做:

mock.Setup(x => x.GetAll()).Returns(new List<IOtherExample>());

但我想学习如何使用Mock.Of。

错误如下所示:

 Expression of type 'System.Collections.Generic.List' cannot be used for parameter of type 'System.Collections.Generic.IList' of method 'Moq.Language.Flow.IReturnsResult' Returns(System.Collections.Generic.IList)'

再次请记住,如果GetAll是属性,它就有效。

谢谢。

public interface IExample : IGenericExample<IOtherExample>
{

}

public interface IGenericExample<T>
{
   IList<T> GetAll()
}

1 个答案:

答案 0 :(得分:2)

由于代码格式化,无法将其发布为评论:

void Main()
{   
    var t = Mock.Of<IExample>(x => x.GetAll() == new List<IOtherExample>());
    t.GetAll().Dump();
}

// Define other methods and classes here
public interface IOtherExample
{
}

public interface IExample : IGenericExample<IOtherExample>
{

}

public interface IGenericExample<T>
{
   IList<T> GetAll();
}

这适用于我的LINQPad,我使用的是Moq 4.0。我错过了什么吗?