Исключение ParameterMismatch при использовании метода обратного вызова Moq - PullRequest
2 голосов
/ 11 февраля 2009

У меня есть интерфейс с именем 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());
    }

Но когда я запускаю тест, я получаю System.Reflection.TargetParameterCountException в строке, которая вызывает _repository.Object.AddObject ("Users", user) Я новичок в Moq, но из того, что я могу сказать, это должно работать. Что я делаю неправильно. Я хочу добавить пользовательский объект в свой список при вызове AddObject («Пользователи», объект). Поэтому _repository.Object.Users.Count () должно отражать правильное количество пользователей.

1 Ответ

2 голосов
/ 12 февраля 2009

Я перезапишу свой предыдущий ответ.

Эта строка:

_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 принимает то же количество параметров, что и вы, поэтому она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...