在 PowerMock Accepting 中指定 reflect 时的行为差异?
difference in behavior when reflect is specified in PowerMock Accepting?
我是 Java 初学者。
在下面的源码中可以看到,我在网上搜索URL class Mock的示例代码时,
有没有反射的情况和有反射的情况。
每种情况下的行为有何不同?
像{String.class}这样的块状描述是什么意思?
URL mockedURL = PowerMockito.mock(URL);
PowerMockito.when(mockedURL.openConnection()).thenReturn(mockedConnection);
// not reflect case
PowerMockito.whenNew(URL.class).withArguments(Mockito.anyString()).thenReturn(mockedURL);
// reflect case
PowerMockito.whenNew(URL.class.getConstructor(new Class<?>[]{String.class})).withArguments(Mockito.anyString()).thenReturn(mockedURL);
PowerMockito.when(mockedURL.openConnection()).thenReturn(mockedConnection);
这定义了当在 mockedURL
对象上调用 openConnection()
方法时,返回值 mockedConnection
(而不是调用真正的代码)。 syntax/approach 也是 "Mockito" 库中的 defined/used。
PowerMockito.whenNew(URL.class).withArguments(Mockito.anyString())
这将在您使用字符串作为参数创建 URL
对象时使用。将 PowerMockito.whenNew()
与 class
参数一起使用允许您使用 withAnyArguments()
模拟该 class 的任何构造函数,而不仅仅是特定的构造函数。
PowerMockito.whenNew(URL.class.getConstructor(new Class<?>[]{String.class}))
这用于select特定的构造函数。在本例中,它是带有 String
参数的那个。所以当你写new URL("some string")
的时候,就用到了这个mock
new Class<?>[]{String.class}
这只是一个数组,其值声明与其他数组一样。就像写作
new int[] {4, 6, 10}
只是类型是 Class<?>
并且值是一个 String.class
对象。
我是 Java 初学者。
在下面的源码中可以看到,我在网上搜索URL class Mock的示例代码时, 有没有反射的情况和有反射的情况。 每种情况下的行为有何不同?
像{String.class}这样的块状描述是什么意思?
URL mockedURL = PowerMockito.mock(URL);
PowerMockito.when(mockedURL.openConnection()).thenReturn(mockedConnection);
// not reflect case
PowerMockito.whenNew(URL.class).withArguments(Mockito.anyString()).thenReturn(mockedURL);
// reflect case
PowerMockito.whenNew(URL.class.getConstructor(new Class<?>[]{String.class})).withArguments(Mockito.anyString()).thenReturn(mockedURL);
PowerMockito.when(mockedURL.openConnection()).thenReturn(mockedConnection);
这定义了当在 mockedURL
对象上调用 openConnection()
方法时,返回值 mockedConnection
(而不是调用真正的代码)。 syntax/approach 也是 "Mockito" 库中的 defined/used。
PowerMockito.whenNew(URL.class).withArguments(Mockito.anyString())
这将在您使用字符串作为参数创建 URL
对象时使用。将 PowerMockito.whenNew()
与 class
参数一起使用允许您使用 withAnyArguments()
模拟该 class 的任何构造函数,而不仅仅是特定的构造函数。
PowerMockito.whenNew(URL.class.getConstructor(new Class<?>[]{String.class}))
这用于select特定的构造函数。在本例中,它是带有 String
参数的那个。所以当你写new URL("some string")
的时候,就用到了这个mock
new Class<?>[]{String.class}
这只是一个数组,其值声明与其他数组一样。就像写作
new int[] {4, 6, 10}
只是类型是 Class<?>
并且值是一个 String.class
对象。