Я парень .NET. И я в основном код на C#.Как работает «статическое отражение» в java? (например, в mockito или easymock)
С C# 3.0 мы можем использовать лямбда-выражения и деревья выражений для использования static reflection. Например, можно реализовать GetMethodName
в следующем фрагменте кода, чтобы вернуть имя метода передается в параметре:
string methodName = GetMethodName(o => o.DoSomething());
Console.WriteLine(methodName); // displays "DoSomething"
Теперь, когда я смотрю на образцы Mockito (или те, EasyMock) в Java мире, я см:
LinkedList mockedList = mock(LinkedList.class);
when(mockedList.get(0)).thenReturn("first");
Как это работает?
Как работает метод when
? Как он интерпретирует mockedList.get(0)
как вызов метода get с 0 передается как параметр, а не как значение?
Прокси-сервер работает с интерфейсами. Настоящие насмешливые рамки для собственного генерации кода. –
В .NET строго типизированные mocking frameworks используют деревья выражений (см. Moq & Rhino mocks) и действительно динамические прокси. Но здесь мне все еще не ясно, как (даже с прокси-серверами) можно смело настроить макет. Что делать, если я набираю «когда (mockedList.get (0) + mockedList.get (2)). ThenReturn (42)»? –
Rhino Mocks существовал задолго до того, как деревья выражений. В некоторых случаях он может использовать деревья выражений * сейчас *, но он не всегда * делает это. (Он все еще работает в .NET 2.0.) Если вы делаете еще один вызов макета, прежде чем указывать результат последнего, результаты зависят от режима макета. –