在PowerMock接受中指定了反射时的行为差异?

问题描述 投票:0回答:1

我是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);
java powermockito
1个回答
0
投票
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<?>对象。

© www.soinside.com 2019 - 2024. All rights reserved.