我有一个如下所示的类(class):
public class Connection{
public boolean isDBConnectionRelativeException(String key) {
Set<String> keySet = new HashSet<>();
keySet.add("key1");
keySet.add("key2");
keySet.add("key3");
if (keySet.contains(key)) {
return true;
}
return false;
}
}
我不知道如何用它进行单元测试
我在[How to mock the return value of a Map?中发现类似的情况
但我认为这不是同一个问题。 我尝试使用 PowerMockito 执行此操作,如下所示,但它不起作用
@RunWith(PowerMockRunner.class)
@PrepareForTest({HashSet.class})
public class ConnectionExceptionAspectTest {
private Connection connectionExceptionAspect;
@Before
public void init(){
Mockito.validateMockitoUsage();
connectionExceptionAspect = new Connection();
}
@Test
public void isDBConnectionRelativeExceptionMock() {
Set<String> stringSet = new HashSet<>();
Set<String> clazzSet = spy(stringSet);
try {
PowerMockito.whenNew(HashSet.class).withNoArguments().thenReturn((HashSet) clazzSet);
PowerMockito.when(clazzSet.contains("key")).thenReturn(true);
}catch (Exception e){
e.printStackTrace();
}
assertTrue(connectionExceptionAspect.isDBConnectionRelativeException("key"));
}
}
请帮我用它做一个单元测试!谢谢!
**//编辑一次后**
在实际情况中,Set keySet 是用
Set<String> keySet = new HashSet<>();
,keySet.add(element) 无法在测试用例中运行,它比较复杂。所以我只是想模拟它以获得像
这样的结果PowerMockito.when(keySet.contains("key")).thenReturn(true);
我知道 PowerMockito 可以模拟本地新变量实例,但我不知道如何处理本地新 map 实例。我找不到任何关于这个的信息。 我非常感谢所有关心这个问题的人。 我的英语很糟糕,无法解释我的问题。
//第二次编辑后
我知道如何模拟 POJO 本地新变量实例,但我不知道如何模拟 Set< String >、Map< String,String > 等本地新变量实例。我认为他们是非常不同的。这就是问题:如何模拟本地 Set< String >、Map< String,String > 等实例。
最佳答案
上述方法不需要模拟局部变量。
@Test
public void isDBConnectionRelativeExceptionMock() {
assertTrue(connection.isDBConnectionRelativeException("key1"));
assertTrue(connection.isDBConnectionRelativeException("key4"));
}
关于java - 如何在包含本地 Set<String> 变量的方法中进行单元测试?使用 powerMock 或 Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57767897/