2014-12-23 2 views
0

я использую EclEmma и пытается увеличить свое тестовое покрытие:написание тест JUnit случае для вызова метода

до сих пор это мой код:

public RolesResponse findRolesByTenant(RolesRequest rolesRequest) 
    { 
     RolesResponse rolesResponse = new RolesResponse(); 
     List<Role> roleList = null; 
     if (StringUtils.isNotBlank(rolesRequest.getTenantCode())) 
     { 
      roleList = roleFunctionService.getAllRolesAndFunctionsByTenant(rolesRequest.getTenantCode()); 

     } 
     if (CollectionUtils.isNotEmpty(roleList)) 
     { 

      rolesResponse.setRoles(roleList); 
     } 
     else 
     { 

      rolesResponse.setError(LayerContextHolder.getErrorObject()); 
     } 

     return rolesResponse; 
    } 

и вот мой тест:

@Test 
    public void findRolesByTenantTest() 
    { 
     RolesRequest rolesRequest = new RolesRequest(); 
     rolesRequest.setTenantCode("test"); 
     ErrorObject errorObject = new ErrorObject(); 


     RolesResponse rolesResponse = rolesProcessService.findRolesByTenant(rolesRequest); 
     Assert.assertNull(rolesResponse.getError()); 

    } 

единственная линия EclEmma выдвигает на первый план в красном это одна:

rolesResponse.setError(LayerContextHolder.getErrorObject()); 

может кто-то помочь мне в построении окончательного теста, необходимого для покрытия этой линии

благодаря

ответ

2

Я действительно не поклонник вашего теста в любом случае - то, что вы пытаетесь доказать ошибку будучи нуль? Что список вернулся с чем-то? Кроме того, вы уверены, что ваша служба вернет результат, который вы хотите в своем тестировании, каждый раз?

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

Из вашего кода я вижу два случая.

  • roleFunctionService#getAllRolesByFunctionAndTenant может возвращать непустой список.
    • Подразумевается, что итоговый rolesResponse#roles содержит все, что было в списке, предоставленном методом, и это должно быть проверено.
    • Также подразумевается, что на объекте нет ошибки, поэтому он должен быть null.
  • roleFunctionService#getAllRolesByFunctionAndTenant может возвращать пустой список
    • Либо полученный rolesResponse#roles являются пустыми или null; было бы лучше, если бы оно было пустым.
    • Подразумевается, что там является ошибкой на объекте, который определенно предоставлен LayerContextHolder.getErrorObject(). Вы должны проверить, что это именно так.

Вы получите весь подход написания этого теста через использование mocking framework.

+0

Пара предложений в дополнение к этим хорошим комментариям @Makoto. 1) Посмотрите, можете ли вы писать тесты перед тестируемым кодом - это должно помочь вам с вашим дизайном. 2) Мне нравятся имена моих методов тестирования, чтобы объяснить, что тестируется, и поскольку это документация, я оставляю здесь соглашение об именах Java. Например, «should_cope_with_empty_role_list» может быть одним случаем. 3) Мне не нужен этот тип возврата, RolesResponse. Похоже, что это так, что вы можете приспособить либо успех, либо неудачу, с разными полями, заполненными в каждом случае. Упрощать! – unigeek

+0

@Makoto, так что касается пункта 5. Я должен сделать assertNotNull или assertNull на этом. поэтому приносят извинения за код в комментариях, но Assert.assertNull (roleFunctionService.getAllRolesAndFunctionsByTenant (roleRequest.getTenantCode()) ?? как вы можете проверить наличие ошибки? есть что-то вроде assertError? – BlueShark

+0

Вы будете извлекать контекст из объекта roleResponse, используя его геттеры для выполнения утверждений. Вы можете использовать 'assertTrue' для утверждения против полей на этом объекте. – Makoto

Смежные вопросы