Ответ 1
Я написал ссылку Rhino Mocks Arrange/Act/Assert (AAA) Краткое описание синтаксиса. Он содержит сжатую информацию об этом стиле синтаксиса, собранном с веб-сайта Айенде и нескольких других блогов.
Я искал приличную информацию об использовании Rhino Mocks 3.5+ с синтаксисом AAA. Я нахожу много блогов, в которых есть множество вещей из старого и нового, которые, похоже, затрудняют понимание того, как его использовать.
Было бы здорово, если бы был Rhin Mocks AAA Cheat Sheet, как это было сделано для более ранней версии. Требуется ли вам знать все о старых версиях Rhino, чтобы использовать более новую версию? Я уверен, что если бы я был экспертом, мне понравились бы все возможности в Rhino, но пока я просто плаваю в информации. Любые указатели или хорошие ссылки будут полностью оценены!
Я написал ссылку Rhino Mocks Arrange/Act/Assert (AAA) Краткое описание синтаксиса. Он содержит сжатую информацию об этом стиле синтаксиса, собранном с веб-сайта Айенде и нескольких других блогов.
Я предполагаю, что вы знакомы с официальной документацией что, на мой взгляд, неплохо. Мое предложение состоит в том, чтобы попытаться использовать Rhino, и когда вы столкнетесь с некоторыми более конкретными проблемами, поиск решения зависает на SO или где-то еще. Я не думаю, что есть всеобъемлющий чит-лист для носорогов. Думаю, вам повезет больше: "Как я могу это сделать, используя Rhino Mocks"
Изменить: Ну, вам не нужно использовать запись/воспроизведение при настройке AAA. В AAA есть три шага:
.
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);
Act, который означает выполнение тестов
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());
Возможно, приведенные выше примеры не самые лучшие, но могут помочь вам в правильном направлении.
Сначала убедитесь, что вы знаете, что вы имеете в виду для каждого A в AAA. Вы можете знать, но я буду включать свои рабочие определения для полноты ответа:
Мне нравится помещать комментарии в свой тестовый код, чтобы напомнить мне подумать обо всех этих вещах. Пример может помочь уточнить: предположим, что у меня есть класс уровня обслуживания, который использует два класса уровня поставщика, один из "старой" системы и один из "новой" системы; Я проверяю, что метод, который копирует старые вещи в новую систему, вызывает метод "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)));
}
Вероятно, вы захотите начать с оригинального сообщения Ayende на AAA, а затем взглянуть на Бен Холл хороший блог о AAA. Чем вы могли бы использовать все полные ссылки, упомянутые в других ответах...