如何编写 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 (假设 countDupChars
是 MessageBuilder
类的方法)。
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/