如何使用Testng和PowerMockito模拟Map

时间:2018-11-27 03:59:35

标签: java testng

对于personMap,我正在使用Powermockito设置值;

但是我无法从map中获取值;

/**
 * 
 */
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);总是返回空;即使我正在设置map的值;

/**
 * 
 */
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 :(得分:1)

为什么要模拟地图?您可以只创建一个新的Map并将其分配给您的对象。当我们说Mock时,我们是Mock而不是数据。

我们提供的模拟是为了确保我们使用的对象在调用其方法之一时始终提供一致的值。

这将使我们专注于测试的代码,而不必担心代码所依赖的方法会给您带来错误的结果。

因此,如果您在代码中使用Map,只需将数据放入Map中就可以了。您根本不需要嘲笑它。

答案 1 :(得分:0)

我可以使用以下代码覆盖每个片段:

if/while