насмешливые методы родного брата - PullRequest
3 голосов
/ 21 апреля 2011

Предполагая, что у меня есть следующее, я хочу провести модульный тест:

class Foo: IAMethods, IBMethods 
{
    // Implementation of IAMethods.A()
    public int A() 
    {
       return B() + 1;
    }
    // Implementation of IBMethods.B()
    public int B() 
    {
        return 1;
    }
 }

Как я могу издеваться над B () при вызове A ()?Я предполагаю, что дизайн класса, вероятно, неверен.У меня есть ситуация, когда у нас есть сервисный уровень с большим количеством интерфейсов, и иногда одна функция сервисного уровня вызывает другую (используя тот же или другой интерфейс).Я не уверен, как вы можете издеваться над другими методами сервисного уровня, так как вы не можете по-настоящему внедрить что-то в саму зависимость.Кто-нибудь может дать мне некоторую ясность в этой ситуации и рекомендации?

Ответы [ 2 ]

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

Посмотрите на частичные макеты для Moq (RhinoMocks имеет нечто подобное). Как минимум, он должен быть виртуальным.

public virtual int B()
{
   return 1;
}

В вашем тесте ...

Mock<Foo> mock = Mock<Foo>();
mock.Setup(m => m.B()).Returns(5);
int result = mock.Object.A(4);

Assert.That(result, Is.EqualTo(9));

C # не допускает смешивание, но каждый интерфейс может быть реализован отдельными классами, тогда класс обслуживания верхнего уровня может делегировать вызовы им через композицию.

0 голосов
/ 21 апреля 2011

Вы можете создавать шаблоны элементов Visual Studio, чтобы помочь вам издеваться. Подробнее на Создание шаблонов элементов .

С уважением, John

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