Как макетировать карту с помощью testng и powermockito - PullRequest
0 голосов
/ 27 ноября 2018

Для personMap я устанавливаю значения с помощью Powermockito;

Но я не могу получить значения из карты;

/**
 * 
 */
package mapmoocer;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class PersonStore {

    Map<String, java.util.List<Person>> personMap = new HashMap<String, List<Person>>();


    public void check() {
        List<Person> list = personMap.get("RAM");
        for(Person person : list) {
            System.out.println(person);
        }
    }

    public void hello() {
        System.out.println("Hello");
    }

}

Здесь приведен тестовый класс;для test_check(), не для покрытия для каждого блока;when(personMap.get("RAM")).thenReturn(value); всегда возвращается пустым;хотя я устанавливаю значения для карты;

/**
 * 
 */
package mapmoocer;

import static org.powermock.api.mockito.PowerMockito.when;

import java.util.ArrayList;
import java.util.Map;

import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.powermock.modules.testng.PowerMockObjectFactory;
import org.testng.IObjectFactory;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.ObjectFactory;
import org.testng.annotations.Test;


public class PersonTest {

    @InjectMocks
    PersonStore personStore = new PersonStore();

    @ObjectFactory
    public IObjectFactory getObjectFactory() {
        return new PowerMockObjectFactory();
    }

    @Mock
    Map<String, java.util.List<Person>> personMap;

    @BeforeClass
    public void before(){
        MockitoAnnotations.initMocks(this);
    }

    public void after() {

    }


    @Test
    public void test_hello() {
        personStore.hello();
    }

    @Test
    public void test_check() {
        Person person = new Person();
        person.setEmail("aa");
        java.util.List<Person> value = new ArrayList<Person>();
        when(personMap.get("RAM")).thenReturn(value);
        personStore.check();
    }

}

Помогите мне в этом.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я могу закрыть для каждого фрагмента следующий код:

package mapmoocer;

import static org.powermock.api.mockito.PowerMockito.when;

import java.util.ArrayList;
import java.util.Map;

import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.modules.testng.PowerMockObjectFactory;
import org.testng.Assert;
import org.testng.IObjectFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.ObjectFactory;
import org.testng.annotations.Test;


public class PersonTest {

    @InjectMocks
    PersonStore personStore = new PersonStore();

    @ObjectFactory
    public IObjectFactory getObjectFactory() {
        return new PowerMockObjectFactory();
    }

    @Mock
    Map<String, java.util.List<Person>> personMap;

    @BeforeClass
    public void before(){
        MockitoAnnotations.initMocks(this);
    }

    @AfterClass
    public void after() {

    }


    @Test
    public void test_hello() {
        personStore.hello();
    }

    @Test(dataProvider="store")
    public void test_check(Object data) {
        java.util.List<Person> persons = (java.util.List<Person>)data;
        when(personMap.get("RAM")).thenReturn(persons);
        personStore.check();
    }

    public Object[][] store() {
        Person person = new Person();
        person.setEmail("aa");
        person.setName("AA");

        java.util.List<Person> value = new ArrayList<Person>();
        value.add(person);

        Object[][] result = {
                {value}
        };
        return result;
    }

}
0 голосов
/ 27 ноября 2018

Почему вы хотите издеваться над картой?Вы можете просто создать новую карту и назначить ее для вашего объекта.Когда мы говорим Mock, мы Mock действие, а не данные.

Мы представляем макет, чтобы убедиться, что объект, который мы используем, всегда будет предоставлять непротиворечивое значение, когда мы вызываем один из его методов.

Это заставит нас сосредоточиться на коде, который мы тестируем, и не нужно беспокоиться о методе, на который опирается ваш код, который даст вам неправильный результат.

Так что, если вы используете Mapв вашем коде вы просто помещаете данные на карту, все готово.Тебе вообще не нужно издеваться над этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...