小编Pet*_*PH'的帖子

如何使用 NSubstitute 设置 IEnumerable 类的返回值

我有这个域名:

public class ADomainClass
{
    public int Id { get; set; }
}

public interface IMyClass : IEnumerable<ADomainClass>
{
}

public class MyClass : IMyClass
{
    public IEnumerator<ADomainClass> GetEnumerator()
    {
        IList<ADomainClass> list = new List<ADomainClass>();
        //list = GetData...();

        foreach (var item in list)
        {
            yield return item;
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

并想要构建以下测试:

[Test]
public void TestSample()
{
    //Arrange
    IMyClass myclass = Substitute.For<IMyClass>();
    IList<ADomainClass> testdata = new List<ADomainClass>()
    {
        new ADomainClass(){ Id = 1, },
        new ADomainClass(){ Id = 2, }, …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing nsubstitute

7
推荐指数
2
解决办法
6444
查看次数

MemberExpression,从类构建 Expression.Property

下面的表达式将属性 NAME 与值 PETER 进行比较。

            ParameterExpression pe = Expression.Parameter(typeof(T), "x");
            MemberExpression member = Expression.Property(pe, "name");
            ConstantExpression value = Expression.Constant("Peter");
            exp = Expression.Equal(member, value);
Run Code Online (Sandbox Code Playgroud)

如果该属性是一个类怎么办:

            public class Address
            {
                public string Name {get; set;}
            }
Run Code Online (Sandbox Code Playgroud)

那么表达式将类似于以下内容:

            MemberExpression member = Expression.Property(pe, "Address.Name");
            ConstantExpression value = Expression.Constant("Peter");
            exp = Expression.Equal(member, value);
Run Code Online (Sandbox Code Playgroud)

这会失败,因为成员类型与值类型不匹配。

所以,问题是:如何构建一个可以使用上述类示例工作的表达式?

我在 NHibernate.Linq 查询中使用此表达式:

        var q = from f in data //of type IQueryable<T>
            select f;
        if (filter != null) //filter of type Expression<Func<T, bool>>
            q = q.Where(filter);
        etc....
Run Code Online (Sandbox Code Playgroud)

谢谢。

彼得更新 …

c# fluent-nhibernate linq-expressions

6
推荐指数
1
解决办法
1万
查看次数