Сравнение HashMap в JUnitTesting - PullRequest
       4

Сравнение HashMap в JUnitTesting

1 голос
/ 15 января 2020

Я должен:

  1. Написать функцию, которая принимает массив / список строк, подсчитывает вхождение каждой строки, а затем возвращает структуру данных с каждой уникальной строкой и количество раз это произошло. Например, учитывая входные данные, которые содержат:

[«apple», «bat», «apple», «car»]

функция должна возвращать структуру данных, которая имеет счет 2 для «яблока», 1 для «летучей мыши» и 1 для «автомобиля».

Напишите покрытие модульного теста для моего решения. Покройте перестановки, которые гарантируют, что положительная / отрицательная функциональность правильна. Кроме того, охватите значимые крайние случаи, чтобы обеспечить как правильную функциональность, так и избежать ошибок при выполнении кода.

Теперь я выполнил первую задачу, вот код:

package Testing;
import java.util.*;
class CountString{
public static void main(String []args){
    List strings = Arrays.asList("appLe","b at","APPle","car!");
    Map<String,Integer> datastructure = countStrings(strings);
    for (Map.Entry<String, Integer> entry : datastructure.entrySet()) {
        System.out.println(entry.getKey() + " : " + entry.getValue());
    }
}

public static Map<String,Integer>countStrings(List<String> words){
    Map<String,Integer> map = new HashMap<>();
    List<String>newList = new ArrayList<>();
    String regex = "abcdefghijklmnopqrstuvwxyz";
    regex+=regex.toUpperCase();
    String w;
    for(String s:words){
        w="";
        for(int i=0;i<s.length();i++){
            if(regex.contains(s.charAt(i)+"")){
                w+=s.charAt(i)+"";
            }
        }
        newList.add(w.toLowerCase());
    }
    String countedWords = "";
    int count;
    for(int i=0;i<newList.size();i++){
        count=1;
        if(!countedWords.contains(newList.get(i))){
            for(int j=i+1;j<newList.size();j++){
                if(newList.get(i).equals(newList.get(j))){
                    count++;
                }
            }
            countedWords+=newList.get(i)+"";
            map.put(newList.get(i),count);
        }

    }
    return map;
    }
}

Теперь мне нужно разработать модульное тестирование этого, но я немного запутался в сравнении hashmap, пожалуйста, помогите мне в этом,

Вот небольшая попытка, которую я сделал:

package Testing;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;

class JUnitTest {

@Test
void test() {
    CountString test = new CountString();
    List strings = Arrays.asList("appLe","b at","APPle","car!");
    Map<String,Integer> output = test.countStrings(strings);

    for(Map.Entry<String, Integer> entry : output.entrySet()) {
        assertEquals(expecteds, output);


        }
    }
}

Не могу узнать, как работает функция assertEqual в Map.

1 Ответ

1 голос
/ 15 января 2020

Я попробовал себя, и это решение сработало для меня!

package Testing;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.jupiter.api.Test;

class JUnitTest {

@Test
void test() {
    CountString test = new CountString();
    List strings = Arrays.asList("appLe","b at","APPle","car!","truck!","tr UcK2");
    Map<String,Integer> output = test.countStrings(strings);
    Map<String,Integer> expecteds = new HashMap<>();
    expecteds.put("apple", 2);
    expecteds.put("bat", 1);
    expecteds.put("car", 1);
    expecteds.put("truck", 2);
    for(Map.Entry<String, Integer> entry : output.entrySet()) {
        assertEquals(expecteds.get(entry.getKey()), output.get(entry.getKey()));


        }
    }
}
...