gpt4 book ai didi

c# - "static reflection"在 Java 中如何工作? (例如在 mockito 或 easymock 中)

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:02 25 4
gpt4 key购买 nike

我是 .NET 专家 - 我主要使用 C# 编写代码。

从 C# 3.0 开始,我们可以利用 lambda 表达式和表达式树来使用 static reflection .例如,可以在以下代码片段中实现 GetMethodName 以返回传入参数的方法的名称:

string methodName = GetMethodName( o => o.DoSomething());
Console.WriteLine(methodName); // displays "DoSomething"

现在,当我查看 Java 世界中的 Mockito 示例(或 EasyMock 示例)时,我看到:

LinkedList mockedList = mock(LinkedList.class);
when(mockedList.get(0)).thenReturn("first");

它是如何工作的?

when 方法是如何工作的?它如何将 mockedList.get(0) 解释为 以 0 作为参数而不是值传递的 get 方法调用

最佳答案

模拟库通常不适用于表达式树。他们构建一个实现适当接口(interface)的类型,并通过记录或验证它们并返回预编程的响应来响应方法调用。这通常使用代理(例如 .NET 中的 RealProxy,Java 中的 Proxy)或动态代码生成来完成。

对于 EasyMock,它使用 Proxy(无论如何用于接口(interface)),如您在源代码中所见:查看 org.easymock.internal.JavaProxyFactory.

关于c# - "static reflection"在 Java 中如何工作? (例如在 mockito 或 easymock 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com