gpt4 book ai didi

Java模拟函数来改变它的行为

转载 作者:行者123 更新时间:2023-11-29 06:27:50 25 4
gpt4 key购买 nike

我正在为这样的类编写单元测试:

public class AClass{
private List<String> testStringList;

public void upperMethod(){

testStringList = new ArrayList<String>();
// add some thing to the string here
List<String> newStringList = lowerMethod(testStringList)
// .......
}

public List<String> lowerMethod(testStringList){
//modify the test string list, like reverse it
return modifiedString;
}
}

我想在对 upperMethod 进行单元测试时更改 lowerMethod 的 行为。例如,将新项目附加到 testStringList,而不是将其反转。

看完mockito doc我产生了一些这样的想法:

public class testClass{
AClass aOriginal;
AClass aSpy;

@Before
public void setUp(){
aOriginal = new AClass();
aSpy = spy(aOriginal);

when(aSpy.lowerMethod(any())).thenAnswer(new Answer() {
public List<String> answer(InvocationOnMock invocation){
Object[] objects = invocation.getArguments();

//Get String list from it somehow, and append a new item, return it
}
});
}

@Test
//test method later with new lowerMethod behavior
}

我想我的主要问题是如何让这个想法发挥作用?执行此操作的最佳方法是什么?

我在这里阅读了多个文档和问题,我的不同之处在于

  1. 如何通过调用传递一个字符串列表,即如何为该对象列表提取字符串列表?
  2. Mockito.when 中,当我通过 any() 调用时,answer 方法中的列表追加函数总是返回一个 java.lang.NullPointerException

最佳答案

当您处理 spy 时,您应该使用 do().when() 语法。这将阻止测试调用实际实现。

同时尝试使用更专业的 Mockito.any(List.class) 而不是通用的 Mockito.any():

@Before
public void setUp(){
aOriginal = new AClass();
aSpy = spy(aOriginal);

doAnswer(new Answer() {
public List<String> answer(InvocationOnMock invocation){
Object[] objects = invocation.getArguments();

//Get String list from it somehow, and append a new item, return it
})
.when(aSpy).lowerMethod(any(List.class)));
});
}

关于Java模拟函数来改变它的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48026900/

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