Je cherche des informations décentes sur l'utilisation de Rhino Mocks 3.5+ avec la syntaxe AAA. Je trouve beaucoup de blogs qui ont un mélange de choses de l'ancien et du nouveau qui semblent rendre plus difficile de comprendre comment l'utiliser. P>
serait génial serait bien serait s'il y avait une fiche de triche AAA comme une version antérieure. Est-il nécessaire que vous sachiez tout sur les anciennes versions de Rhino pour utiliser la version plus récente? Je suis sûr que si j'étais un expert que j'aimerais aimer toutes les capacités de Rhino, mais pour l'instant, je ne fais que nager dans l'information. Tous les pointeurs ou bons liens seraient totalement appréciés! P>
4 Réponses :
Je suppose que vous êtes familier avec officiel documentation , ce qui est assez bon à mon avis. Ma suggestion est d'essayer d'utiliser Rhino, et lorsque vous rencontrez une recherche de problèmes plus spécifiques pour flétrir solution sur SO ou ailleurs. Je ne pense pas qu'il y ait une feuille de triche complète pour se moque de Rhino. Je suppose que vous aurez plus de chance de demander: « Comment puis-je faire cela et que l'utilisation de Rhino Mocks »
Edit: Eh bien, vous n'avez pas besoin d'utiliser d'enregistrement / lecture lors du ciblage AAA. Il y a trois étapes dans AAA: p>
. P>
Assert.AreEqual("CMC 56", omicron.Type); mockWrapper.AssertWasCalled(wrapper => wrapper.Release(), options => options.Repeat.AtLeastOnce());
Loi strong>, qui signifie l'exécution des tests p>
Assertion strong>, qui signifie veryfing
les résultats p> li>
Ul> . P> 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();
}
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);
Merci et oui - Ayende a de superbes choses à coup sûr. Tout comme un débutant voulant apprendre à faire AAA avec Rhino, il semble presque que je dois le faire à l'aide de l'enregistrement / de la lecture, puis comme des questions spécifiques sur la manière de le faire un style AAA? Bien sûr, je devrais apprendre le disque / la lecture d'abord. C'est pourquoi je suis confus où commencer à bien poser une bonne question.
Ma suggestion est de sauter tout à fait enregistrer / lire. Je pense que la syntaxe AAA est plus propre et plus facile à comprendre et vous n'avez pas besoin de savoir comment cela a été fait dans le passé en utilisant R / P. Commencez par écrire quelques tests d'unités simples et faire des affirmations comme vous pensez que Rhino fonctionne. Cela vous aidera ensuite à obtenir une certaine pratique avec la syntaxe AAA.
-1 L'idée d'AAA est que vous configurez des talons avec un comportement au début et que vous apportez des affirmations à la fin (comme indiqué dans la documentation que vous portez sur). Mais vous utilisez des simulacres au lieu des talons, vous définissez des attentes au début et les attentes ne sont même jamais vérifiées car vous n'utilisez pas VerifyLexplexpectings code> n'importe où. Il est évident de cette question de suivi du projet de loi que vous l'avez confondre:
@WIM COENEN - Si vous regardez ses attentes, il a répété. () Ce qui signifie qu'il n'y a pas besoin d'appeler Verifyallexpections ().
Vous assurez d'abord que vous savez ce que vous voulez dire pour chaque AAA. Vous savez peut-être que je comprendrai mes définitions de travail pour l'exhaustivité de la réponse:
J'aime mettre des commentaires dans mon code de test pour me rappeler de penser à chacune de ces choses. Un exemple peut aider à clarifier: Supposons que j'ai une classe de couche de service qui utilise deux classes de couche de fournisseur, l'une d'un système "ancien" et un d'un "nouveau" système; Je teste que la méthode qui copie les anciennes choses au nouveau système appelle la méthode "Carritingt" une fois pour chaque vieille chose trouvée. P>
[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))); }
J'ai écrit un Rhino Mocks Arrangez / ACT / ACTER (AAA ) Syntaxe Référence rapide . Il contient des informations condensées sur ce style de syntaxe recueillies à partir de
1 commentaires
+1: belle référence rapide. Je l'aime bien. Assez complet. Ce n'est peut-être pas un bon départ pour comprendre les concepts, mais c'est bon de se souvenir de la syntaxe et de voir ce qui est possible.
Vous voudriez probablement commencer à Publication originale d'Ayende sur AAA , et que jetez un coup d'œil à