Je suis un gars .NET - et je code principalement en C#. Depuis C# 3.0, nous pouvons utiliser les expressions lambda et les arbres d'expression pour utiliser static reflection. Par exemple, il est possible de mettre en œuvre GetMethodName
dans l'extrait suivant pour renvoyer le nom de la méthode passée en paramètre:Comment fonctionne la "réflexion statique" dans Java? (par exemple dans mockito ou easymock)
string methodName = GetMethodName(o => o.DoSomething());
Console.WriteLine(methodName); // displays "DoSomething"
Maintenant, quand je regarde les échantillons Mockito (ou les EasyMock) dans le monde java, je voir:
LinkedList mockedList = mock(LinkedList.class);
when(mockedList.get(0)).thenReturn("first");
Comment ça marche?
Comment fonctionne la méthode when
? Comment interprète-t-il mockedList.get(0)
comme un appel à la méthode get avec 0 passé comme paramètre et non comme une valeur?
Proxy sur fonctionne avec des interfaces. De véritables frameworks moqueurs à leur propre génération de code. –
Dans .NET, les frameworks de mocking fortement typés utilisent des arbres d'expression (voir Moq & Rhino) et des proxies dynamiques. Mais ici, je ne comprends toujours pas comment (même avec des proxies) vous pouvez configurer le simulacre en toute sécurité. Que faire si je tape "when (mockedList.get (0) + mockedList.get (2)). ThenReturn (42)"? –
Rhino Mocks existait bien avant les arbres d'expression. Il peut utiliser des arbres d'expression * maintenant * dans certains cas, mais cela ne le fait pas * toujours *. (Cela fonctionne toujours dans .NET 2.0.) Si vous faites un autre appel au faux avant de spécifier le résultat du dernier, les résultats dépendent du mode du faux. –