Проверьте свойства объекта, переданного обратно в макет, используя Moq - PullRequest
2 голосов
/ 13 апреля 2011

Можно ли проверить, какие свойства объекта передаются в метод Mocked? Например, у меня есть:

public class Foo
{
    int SomeNumber {get; set;}
}

public class ReceivesFoo: IReceivable
{
    public void Process(Foo foo)
    {
    }
}

public class Bar
{
    private IReceivable receiver;

    public void SomeMethod(int b)
    {
        Foo foo = new Foo();
        if (b == 0)
        {
            foo.SomeNumber = 12;
        }
        else
        {
            foo.SomeNumber = 7;
        }
        receiver.Process(foo);
    }
}

public class TestBar
{
    public void ZeroReceives12()
    {
        mockReceivable.Setup(x => x.Process(It.IsAny<Foo>());
        bar.SomeMethod(0);
    }
}

Это довольно упрощение, но, надеюсь, вы знаете, к чему я клоню. Я знаю, что создавать новый класс в методе - плохая идея. Так что это делается где-то еще на фабрике сортов. Но вся логика для установки различных свойств нового объекта выполняется в этом методе. Потому что нет смысла использовать эту логику на фабрике, потому что она не имеет ничего общего с фабрикой, и все будет меняться в зависимости от состояния бара.

Так что, в общем, я просто хочу иметь возможность сделать больше, чем просто проверить, что поддельный приемник получил бы какое-то Foo. Я хочу убедиться, что он получил экземпляр Foo и его SomeNumber был установлен на 12.

1 Ответ

2 голосов
/ 13 апреля 2011

Это отличный справочник для вас ... https://github.com/Moq/moq4/wiki/Quickstart

В основном вы хотите что-то вроде этого ...

public void ZeroReceives12()
{
    int input;

    mockReceivable.Setup(x => x.Process(It.IsAny<Foo>())
              .Callback(y => foo = y);

    bar.SomeMethod(0);

    // ensure input is what you expect
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...