我正在使用PowerMockito验证私有方法的调用数:loadProperties()
。我还将该方法存根以返回预定义的值。
尽管我已将方法存根,但实际的实现正在被调用,并抛出一个NullPointerException
,因为它的依赖项(“loader”变量,请参见下面的代码片段)没有为此测试定义(也不应该定义)。
作为实验,我把方法改成公开,然后就没问题了!
我认为这是PowerMockito中的一个错误,但我在比这更确定的事情上错了!
这是密码
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.util.HashMap;
import java.util.Map;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.times;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest({DArgumentsLoader.class})
public class TestConfig {
@Test
public void testGetPropertyMapCalledOnce() throws Exception {
Config configMock = mock(Config.class);
Map<String, String> testMap = new HashMap<String, String>();
testMap.put("xx", "xx");
when(configMock, "loadProperties").thenReturn(testMap);
when(configMock.getString(anyString(), anyString())).thenCallRealMethod();
// call it twice
configMock.getString("xx", "yy");
configMock.getString("xx", "yy");
// verify loadProperties was only called once
PowerMockito.verifyPrivate(configMock, times(1)).invoke("loadProperties");
}
}
为了澄清,Config
类看起来像这样
private Map<String, String> loadProperties() throws IOException, HttpException {
return loader.loadProperties();
}
public String getString(String key, final String defaultValue) {
String value = getPropertyMap().get(key);
if(value != null) {
return value;
} else {
return defaultValue;
}
}
private Map<String, String> getPropertyMap() throws LoadException {
if(propertyMap == null) {
propertyMap = loadProperties();
}
return propertyMap;
}
鉴于测试人员所说的事实,根本不应该调用loadProperties()
方法
when(configMock, "loadProperties").thenReturn(testMap);
但它正在被调用,并抛出一个NullPointerException
。这是一个bug还是一个特性?
您没有准备用于mocking的Config
类,因此PowerMock无法处理它。只需将其添加到@PREareForTest
注释中,就可以了:
@PrepareForTest({Config.class, DArgumentsLoader.class})
我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法
问题内容: 我正在尝试使用“ any”匹配器对这个getKeyFromStream方法进行存根。我尝试了更明确和不太明确的(anyObject()),但似乎无论我如何尝试,此存根都不会在我的单元测试中返回fooKey。 我想知道是否是因为它受到保护,或者我缺少其他东西或做错了什么。在整个测试中,我还有其他的when / then语句在 起作用, 但是由于某种原因,事实并非如此。 注意:getKey
测试类别 测试类别 详图搁置器 当我尝试模拟方法HistoryFromStrgyTable()的数据时,它实际上是在调用HistoryFromStrgyTable(),而不是从mockHistoryFromStrgyTable()获取数据。 我的测试用例在这一行失败了 谁能帮我一下吗。我不明白怎么了。我还将方法mockHistoryFromStrgyTable()从private更改为public
当一个方法完成时,我试图使用Byte Buddy来执行一些额外的逻辑。以下是示例代码: 当我把代表团和。第二次调用时,此实例的原始调用方将丢失来自“proxyClient”对象的返回值,该对象以前用于调用它的方法调用。我是不是用错了? 基本上,我希望在方法的末尾添加一些附加逻辑(在原始方法内部或添加另一个方法调用并不重要),但同时保留原始方法调用的返回值。
问题内容: 使用标准Java库,从IPV4地址的虚线字符串表示形式()到等效整数表示形式()的最快方法是什么。 相应地,反转所述操作的最快方法是什么-从整数到字符串表示形式? 问题答案: 字符串到整数: 整数到字符串:
问题内容: 我以为我有一种快速的方法来将“唯一标识符”值转换成Big Int,然后再转换回来。但是在我的第二次转换中有一个问题。任何人都可以评论将GUID完全转换为数字并返回的正确方法吗?当我尝试将其从数字表示形式转换回其原始GUID时,我只是得到了GUID的一部分,而不是全部。 我想将一个整数(我认为它将在MSSQL中归类为“ Large BigInt”?)传递给远程系统,仅使用字符0-9,并且