0

私は次のコードを持っています:

var connector = new Mock<IConector>();

connector
    .Setup(cn => cn.listar("FetchEstandar", new Estandar(), new {Id = 1}))
    .Returns(new List<Estandar>{ new Estandar {Id = 1} });

 var entidad = connector.Object
     .listar("FetchEstandar", new Estandar(), new {Id = 1});

コネクタオブジェクトを呼び出すとlistar"Expression Cannot Contain an Anonymouse Type"エラーが発生します。サイのモックとモックを試してみました。

このメソッドをモックする方法はありますか?私は何か間違ったことをしていますか?または、このパラメーターを無視することもできますが、方法がわかりません。私は本当に最初のパラメーターの値をテストする必要があり、ignoreargumentsは機能しますが、この値を使用した場合にこの値を取得できるかどうか、またはどのように取得できるかわかりません

4

1 に答える 1

2

これが匿名オブジェクトを照合する唯一の方法であるかどうかはわかりませんが、It.Is <>()とリフレクションを使用して行うことができます

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

public interface IConector {
    IEnumerable<Estandar> listar(string name, Estandar estandar, object key);   
}


[TestMethod]
public void CheckAnonymous() {

    var connector = new Mock<IConector>();

    connector.Setup(cn => cn.listar("FetchEstandar",
                                    It.IsAny<Estandar>(),
                                    It.Is<object>(it => MatchKey(it, 1))))
             .Returns(new List<Estandar> { new Estandar { Id = 1 } });

    var entidad = connector.Object.listar("FetchEstandar", new Estandar(), new { Id = 1 });

    Assert.AreEqual(1, entidad.Count());

}

public static bool MatchKey(object key, int soughtId) {
    var ret = false;
    var prop = key.GetType().GetProperty("Id");
    if (prop != null) {
        var id = (int)prop.GetValue(key, null);
        ret = id == soughtId;
    }
    return  ret;
}
于 2012-10-17T09:07:59.093 に答える