java - 如何在包含本地 Set<String> 变量的方法中进行单元测试?使用 powerMock 或 Mockito

标签 java unit-testing mockito powermockito

我有一个如下所示的类(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/

相关文章:

c# - 我怎样才能使 WebTest 失败?

c# - 测试通过,但抛出异常

repository - 如何测试 Spring Data Rest @RepositoryRestResource?

java - 在私有(private)方法内编写 switch 语句的测试用例

java - 单元测试断言与 Mockito.verify()

java - 从 Android json 响应中删除对象

java - WebService 未生成。/已生成

java - 什么会影响 Mac 版 JFrame 上缩放按钮的启用状态?

java - JSP:创建图表

java - 测试类中的 Spock 框架覆盖方法