Suppongo che abbiate familiarità con official documentation, il che è abbastanza buono secondo me. Il mio suggerimento è di provare a usare Rhino, e quando si incontra qualche problema più specifico, cerca la soluzione wither su SO o altrove. Non penso che ci sia un cheat completo per i mocciosi di Rhino. Immagino che avrai più fortuna chiedendo "Come posso fare questo e quello usando Rhino Mocks"
Modifica: Bene, non è necessario utilizzare Record/Riproduzione quando si mira AAA. ci sono tre passi necessari per AAA:
- organizzare, che sta per impostare il comportamento della classe di deriso, ad esempio
.
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, che si distingue per l'esecuzione dei test
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();
}
E Assert, che sta per veryfing i risultati
.
Assert.AreEqual("CMC 56", omicron.Type);
mockWrapper.AssertWasCalled(wrapper => wrapper.Release(), options => options.Repeat.AtLeastOnce());
Forse gli esempi sopra riportati non sono i migliori, ma potrebbero portarti nella giusta direzione.
fonte
2010-01-25 08:29:58
Grazie e sì - Ayende ha sicuramente delle ottime cose. Proprio come un principiante che vuole imparare come fare AAA con Rhino sembra quasi che debba farlo usando Record/Playback e quindi come domande specifiche su come farlo in stile AAA? Corso, dovrei prima imparare il Record/Playback. Ecco perché sono confuso da dove iniziare a fare anche una bella domanda. –
Il mio suggerimento è di saltare del tutto la registrazione/riproduzione. Penso che la sintassi AAA sia più pulita e più facile da capire e non hai davvero bisogno di sapere come è stato fatto in passato usando R/P. Inizia scrivendo alcuni semplici test unitari e fai asserzioni nel modo in cui pensi che funzioni Rhino. Questo ti aiuterà a fare pratica con la sintassi AAA. –
-1 l'idea di AAA è che si configurano gli stub con comportamento all'inizio e si fanno asserzioni alla fine (come mostrato nella documentazione a cui si collega). Ma stai usando mock invece di stub, hai impostato le aspettative all'inizio, e le aspettative non sono mai nemmeno verificate perché non usi "VerifyAllExpectations" da nessuna parte. È evidente da questa domanda di follow-up da Bill che lo hai confuso: http://stackoverflow.com/questions/2349454/rhinomocks-aaa-syntax/2350864#2350864 –