2

我有一个名为 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) 时将用户对象添加到我的列表中。所以 _repository.Object.Users.Count() 应该反映正确的用户数量。

4

1 回答 1

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));

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

于 2009-02-11T21:41:04.150 回答