java - 如何编写 Junit 测试用例来测试字符串中的重复元素计数

标签 java junit mockito

如何编写 junit 测试用例来测试给定字符串中的重复值计数,我的代码如下,请有人帮助我

原版

public void countDupChars(String str) {

        Map<Character, Integer> map = new HashMap<Character, Integer>();
        char[] chars = str.toCharArray();

        for (Character ch : chars) {
            if (map.containsKey(ch)) {
                map.put(ch, map.get(ch) + 1);
            } else {
                map.put(ch, 1);
            }
        }

        Set<Character> keys = map.keySet();
        for (Character ch : keys) {
            if (map.get(ch) > 1) {
                System.out.println("Char " + ch + " " + map.get(ch));
            }
        }
    }

测试

@RunWith(MockitoJUnitRunner.class)
public class TestMessageBuilder {

    @InjectMocks
    MessageBuilder builder;

    @Test
    public void testfindcountDupChars() {
        doReturn(true).when(builder).countDupChars("Ramakrishna");
        verify(builder, times(1)).countDupChars("Ramakrishna");
    }
}

最佳答案

我认为你根本不需要使用模拟库。在您的代码中,您似乎正在模拟实际应该测试的对象(MessageBuilder)。我建议更改 countDupChars 方法的签名并返回找到的重复项的映射。

例如:

public Map<Character, Integer> countDupChars(String str) {

    Map<Character, Integer> map = new HashMap<>();
    char[] chars = str.toCharArray();

    for (Character ch : chars) {
        if (map.containsKey(ch)) {
            map.put(ch, map.get(ch) + 1);
        } else {
            map.put(ch, 1);
        }
    }

    Set<Character> keys = map.keySet();
    for (Character ch : keys) {
        if (map.get(ch) > 1) {
            System.out.println("Char " + ch + " " + map.get(ch));
        }
    }
    return map;
}

在测试中,您可以简单地 Assets 返回的 map (假设 countDupCharsMessageBuilder 类的方法)。

public class TestMessageBuilder {

    MessageBuilder builder = new MessageBuilder();

    @Test
    public void testfindcountDupChars() {
        Map<Character, Integer> result = builder.countDupChars("Ramakrishna");
        Assert.assertSame(result.get('R'), 1);
        Assert.assertSame(result.get('a'), 3);
        Assert.assertSame(result.get('m'), 1);
        // and so on ...
    }
}

关于java - 如何编写 Junit 测试用例来测试字符串中的重复元素计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57891030/

相关文章:

java - JDBC 连接不适用于 PowerMockito

java - Powermock withArguments 调用变量输入

java - GridLayout 中 JPanel 之间的差距

java - 当对象键为数字时如何创建 Java getter 和 setter

java - 将 com.itextpdf.text.Image 保存为图像文件

java - 如何覆盖单元测试中被测试类调用的方法

java - 避免多个 Not null 语句

junit - 运行 JUNIT 方法时出现 java.lang.ExceptionInInitializerError

java - Mockito.when().return() 是如何工作的

java - JAXB 2 绑定(bind)无法正常工作