2016-05-31 2 views
0

Я пишу junit, используя mockito для класса Spring @component. Когда он пытается получить доступ к статическому полю из окончательной константы, файл бросает исключение Null pointer.Исключение при получении значений из объекта Mocked с помощью Mockito

CruserDomainTest

@RunWith(MockitoJUnitRunner.class) 
public class CruserTest { 
    @InjectMocks 
    CruserDomain eDomain = new CruserDomain(); 

    @Test 
    public void testGetCruseById() throws Exception, 
      { 
     String cCode = "AA"; 
     int employeeId = 21305; 
     when(
       cruseRepository.getTestId(
         anyString(), anyInt())).thenReturn(
       buildAndReturnList()); 
     when(
       payDomain.getRefPay(anyString(), 
         anyString(), anyString(), anyString())) 
       .thenReturn(buildPay()); 
     CruseMember expectedResponse = eDomain.getMemberById(
       airlineCode, employeeId); 


    } 

CruserDomain

//getting null pointer exception in the below line execution 
//while getting the current month 

public CruseMember getMemberById(String cCode, int employeeId) 
     throws Exception { 

    //Some code // 

     if (contractMonth.getType().equals(
        CruseConstant.CURRENT_MONTH)) { 
       currentMonthStartDate = cMonth.getStartDate(); 
      } else if (contractMonth.getType().equals(
        CruseConstant.OTHER_MONTH)) { 
       nextMonthStartDate = cMonth.getStartDate(); 
      } 

CruseConstant:

public final class CruseConstant { 

    public static final String CURRENT_MONTH = "C"; 
    public static final String OTHER_MONTH = "O"; 
    } 

Я попытался с ReflectionTestutils но бросать исключение при стартах JUnit.

Помогите мне в том, как искать статические переменные конечного класса в классе injectMocked.

+0

Известно, что '@ InjectMocks' терпит неудачу, когда ему не удается ввести зависимость. Вы пробовали внедрить метод '@ Before' в свой тест и самостоятельно переусердствовать зависимостями? –

+0

Я использовал утилиты @Before Reflection Test для установки этих значений, но получал ошибку. Есть ли другой способ, помимо рефлексии testutil, установить значения для этих констант. – Ramkumar

+0

Статику не следует издеваться над Mockito, и вам не нужно использовать Reflection to задайте константы, просто пусть метод использует реальные константы. –

ответ

1

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


Кроме того, в фрагменте кода @InjectMocks не издеваться, чтобы впрыснуть, поэтому не впрыскивает ничего, фиктивные поля должны быть объявлены в тестовом классе. Однако я подчеркиваю, что не издеваюсь над доменом!

Мы написали эту страницу о том, как написать хорошие тесты, я думаю, что практикующие TDD должны ее прочитать, если они используют мокито или нет. Многие люди способствовали уточнению этой вики-страницы.

=>https://github.com/mockito/mockito/wiki/How-to-write-good-tests

0

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

contractMonth 

равна нулю. Это потому, что вы не издевались и/или не забыли определить поведение класса, из которого вы получаете контрактMonth из (CruserRepository?)

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