我是Java初学者。
您可以在下面的源代码中看到,当我在网上搜索网址类Mock的示例代码时,在有些情况下没有反思,在某些情况下有了反思。每种情况下的行为有何不同?
{{。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);
这定义为在openConnection()
对象上调用mockedURL
方法时,将改为返回值mockedConnection
(而不是调用实际代码)。此语法/方法也在“ Mockito”库中定义/使用。
PowerMockito.whenNew(URL.class)
这将通过调用所谓的“默认构造函数”来创建不带任何参数的URL
对象时使用。但是,java.net.URL
没有这样的构造函数,因此为此定义一个模拟没有意义。
java.net.URL
这用于选择特定的构造函数。在这种情况下,它是带有PowerMockito.whenNew(URL.class.getConstructor(new Class<?>[]{String.class}))
参数的那个。因此,当您编写String
时,将使用此模拟。
new URL("some string")
这只是一个带有值声明的数组,与其他数组一样。就像写作
new Class<?>[]{String.class}
仅类型为new int[] {4, 6, 10}
且值是一个Class<?>
对象。