如何使用JUnit和Mockito测试从数据库获取数据的服务

时间:2017-08-22 19:57:33

标签: java spring-boot junit mockito

我编写了一个从数据库中获取数据的java服务:

public List<Operation> listOperations(String code){

//some business logic...

}

我使用我的数据库listOperations("CEA1");中的代码手动测试了服务,它工作正常,它返回给我一个包含3个操作对象的列表(在我的数据库中的结果相同)。

现在我想使用Mockito和JUnit测试我的服务,但我是单元测试的初学者(但我知道单元测试的概念是什么,嘲笑......),

这是我未完成的测试课程:

@RunWith(MockitoJUnitRunner.class)
public class MyserviceTest {

    @Mock
    private OperationRepository  operationRepositoryMock;


    @InjectMocks
    private BanqueServiceImpl banqueServiceImpl;

    @Before
    public void setup() {
      MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testListOfOperation(){

        String code = "CEA1";

        //to check if my service is working good ,the code 'CEA1' should return a list with 3 Operation object
        when(operationRepositoryMock.listOperations(code)). // i dont know how to mock the result


boolean result = banqueServiceImpl.listOperations(code); // i don't know how to assert that the service return a list that contains 3 Operation object

        //assertTrue(result);
    }

请任何人帮我完成我的测试代码,请注意我正在春季启动项目中工作。

问候!

1 个答案:

答案 0 :(得分:2)

首先准备您的操作列表

Operation sampleOperation = new Operation();
List<Operation> operationList = new ArrayList<Operation>();
operationList.add(sampleOperation);

现在使用mockito在调用operationList方法时返回listOperations()

when(operationRepositoryMock.listOperations(eq("CEA1"))).thenReturn(operationList);

现在您可以使用断言来验证列表的大小或验证列表的内容

assertThat("size is equal to 1", banqueServiceImpl.listOperations(code).size(), is(1));