如何编写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");
}
}
答案 0 :(得分:2)
我认为您根本不需要使用模拟库。在您的代码中,您似乎在模拟应该实际测试的对象(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;
}
然后在测试中,您可以简单地归还返回的地图(假设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 ...
}
}