Rhino Mocks ААА Быстрый старт? - PullRequest
11 голосов
/ 23 января 2010

Я искал приличную информацию об использовании Rhino Mocks 3.5+ с синтаксисом AAA. Я нахожу множество блогов, в которых есть смесь старого и нового, что затрудняет понимание того, как им пользоваться.

Было бы замечательно, если бы существовала шпаргалка Rhino Mocks AAA, как это было сделано для более ранней версии. Требуется ли, чтобы вы знали все о старых версиях Rhino, чтобы использовать более новую версию? Я уверен, что если бы я был экспертом, мне бы понравились все возможности Rhino, но сейчас я просто плаваю в информации. Любые указатели или хорошие ссылки будут полностью оценены!

Ответы [ 4 ]

13 голосов
/ 29 марта 2011

Я написал краткий справочник по синтаксису Rhino Mocks Arrange / Act / Assert (AAA) Он содержит сжатую информацию об этом стиле синтаксиса, полученную с веб-сайта Айенде и нескольких других блогов.

1 голос
/ 23 сентября 2011

Возможно, вы захотите начать с оригинального сообщения Айенде о AAA , а затем взгляните на хороший пост в блоге Бена Холла об AAA . Чем вы могли бы использовать все полные ссылки, упомянутые в других ответах ...

1 голос
/ 12 июля 2010

Сначала убедитесь, что вы знаете, что вы имеете в виду для каждого А в ААА. Вы можете знать, но я включу мои рабочие определения для полноты ответа:

  • Arrange - это место, где я настраиваю входы, макеты / заглушки, объект с тестируемым методом
  • Act , где я вызываю тестируемый метод
  • Утверждение - это место, где я проверяю, что произошло или не произошло в соответствии с ожиданиями

Мне нравится добавлять комментарии в мой тестовый код, чтобы напоминать мне о каждой из этих вещей. Пример может помочь прояснить: предположим, у меня есть класс уровня обслуживания, который использует два класса уровня провайдера, один из «старой» системы и один из «новой» системы; Я проверяю, что метод, который копирует старые вещи в новую систему, вызывает метод «CreateThing» один раз для каждой найденной старой вещи.

[Test]
public void Should_create_new_Thing_for_each_old_Thing()
{
  // -----
  // arrange

  // hardcode results from old system provider
  List<Thing> oldThings = new List<Thing> { ... };

  // old system provider
  var oldProvider = MockRepository.GenerateStub<IOldSystemProvider>();
  oldProvider.Stub(m=>m.GetThings()).Return(oldThings);

  // new system provider
  var newProvider = MockRepository.GenerateStub<INewSystemProvider>();

  // service object
  var svc = new MyService(oldProvider, newProvider);

  //-----------
  // act
  var result = svc.CopyThings();

  //------------
  // assert
  oldThings.ForEach(thing => 
                    newProvider.AssertWasCalled(prov => prov.CreateThing(thing)));
}
1 голос
/ 25 января 2010

Полагаю, вы знакомы с официальной документацией , что, на мой взгляд, довольно хорошо. Мое предложение состоит в том, чтобы попытаться использовать Rhino, и когда вы сталкиваетесь с какой-то более конкретной проблемой, ищите решение проблемы в SO или где-то еще. Я не думаю, что есть полная шпаргалка для насмешек Rhino. Я думаю, вам повезет больше, если бы вы спросили: «Как я могу сделать это и то, используя Rhino Mocks»

Edit: Ну, вам не нужно использовать запись / воспроизведение при нацеливании на AAA. ААА включает три этапа:

  • Arrange , что означает настройку поведение порицаемого класса, например

.

IOmicronDll mockWrapper = MockRepository.GenerateMock<IOmicronDll>();
mockWrapper.Expect(wrapper => wrapper.Lock(1, ref errors)).OutRef(string.Empty).Return(true).Repeat.Any();
mockWrapper.Expect(wrapper => wrapper.Exec(1, "sys:cfg?(type)", ref output, ref errors)).OutRef("1,CMC 56,0;", "").Return(true).Repeat.Any();
mockWrapper.Expect(wrapper => wrapper.Exec("1", "sys:cfg?(type)", ref output, ref errors)).OutRef("1,CMC 56,0;", "").Return(true).Repeat.Any();
Microsoft.Practices.Unity.UnityContainer c = new Microsoft.Practices.Unity.UnityContainer();
c.RegisterInstance<IOmicronDll>(mockWrapper);
  • Акт , который означает выполнение тестов

    public Omicron(int deviceID)
    {
        try
        {
            if (g_Omicron == null)
                g_Omicron = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<CMEngineWrapper.IOmicronDll>();
            m_UniqueIdentifier = Guid.NewGuid();
            m_Logger = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<AdvAdmittance.Framework.ILogger>();
            m_ID = deviceID;
            GetConfiguration();
            g_InstancesCount++;
            m_PollThread = new Thread(new ThreadStart(DoPoll));
            m_PollThread.Start();
        }
    
  • и Assert , что означает "самоконтроль" результаты

.

Assert.AreEqual("CMC 56", omicron.Type);
mockWrapper.AssertWasCalled(wrapper => wrapper.Release(), options => options.Repeat.AtLeastOnce());

Возможно, приведенные выше примеры не самые лучшие, но могут привести вас в правильном направлении.

...