使用Moq Callback方法时的ParameterMismatch异常

时间:2009-02-11 20:03:33

标签: moq

我有一个名为IAuthorizationRepository的接口,其接口如下:

public interface IAuthorizationRepository
{
    IQueryable<User> Users { get; }

    Int32 SaveChanges();

    void Detach(Object entity);
    void Attach(IEntityWithKey entity);

    void DeleteObject(Object entity);
    void AddObject(String entitySetName, Object entity);
}

用户定义如下:

public class User{
string Username { get; set; }}

我有一个像这样的TestInitialize方法:

    [TestInitialize]
    public void Init()
    {
        _repository = new Mock<IAuthorizationRepository>();

        List<User> users = new List<User>();

        User user = new User();
        user.Username = "test_osness";

        _repository.ExpectGet(r => r.Users).Returns(users.AsQueryable());

        _repository.Expect(r => r.AddObject("Users", It.IsAny<Object>()))
            .Callback<User>(u => users.Add(u));

        _repository.Object.AddObject("Users", user);

        Console.WriteLine("Users: {0}", _repository.Object.Users.Count());
    }

但是当我运行测试时,我在调用_repository.Object.AddObject(“Users”,user)的行上获得了System.Reflection.TargetParameterCountException。我是Moq的新手,但据我所知,这应该有用。我究竟做错了什么。我想在调用AddObject(“Users”,Object)时将用户对象添加到我的List中。所以_repository.Object.Users.Count()应该反映出正确的用户数。

1 个答案:

答案 0 :(得分:2)

我要覆盖以前的答案。

这一行:

_repository.Expect(r => r.AddObject("Users", It.IsAny<Object>()))
    .Callback<User>(u => users.Add(u));

希望调用一个带有单个参数的.Callback()版本。但是,您期望的“AddObject”方法需要两个参数。我想你需要更像这样的东西:

_repository.Expect(r => r.AddObject("Users", It.IsAny<Object>()))
    .Callback((s, o) => users.Add(o as User));

现在回调lambda采用与您期望相同数量的参数,因此它应该可以工作。