2014-10-07 4 views
1

Я пытаюсь издеваться над статическим методом с использованием powermock. Ниже мой код:Издевательский статический метод с Mockito

public class Helper{ 

    public static User getLoggedInUser(HttpServletRequest request) throws NotFoundException { 
    String access = request.getHeader("Authorization"); 
    if(access == null || access.isEmpty()) { 
     throw new Exception("Access is null"); 
    } 
    User user = new User(); 
    return user; 

    } 

} 

И это функция управления, откуда я звоню статический метод GetUser:

@RequestMapping(value = "user/userInfo/{Id}", method = RequestMethod.GET, headers = "Accept=application/json") 
    public @ResponseBody 
    ResultDTO getUser(@PathVariable("Id") Integer Id, HttpServletRequest request) throws NotFoundException, UnauthorizedException { 

     Integer userID = -1; 

      User user = Helper.getLoggedInUser(request); 
      if(user != null){ 
       userID = user.getUserId(); 
      } 

     //do something 
    } 

И это мой тестовый класс:

//@RunWith(PowerMockRunner.class) 
//@PrepareForTest(Helper.class) 
public class CustomerControllerNGTest { 

@InjectMocks 
    private userController instance = new PaymentCustomerController(); 
    public PaymentCustomerControllerNGTest() { 
    } 

    @BeforeClass 
    public void setUpClass() throws Exception { 
    } 

    @AfterClass 
    public static void tearDownClass() throws Exception { 
    } 

    @BeforeMethod 
    public void setUpMethod() throws Exception { 

     try{ 
      MockitoAnnotations.initMocks(this); 
     }catch(Exception ex){ 
      System.out.println(ex.getMessage()); 
     } 
     try{ 
     mockMvc = MockMvcBuilders.standaloneSetup(instance).build(); 
      // mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); 
     }catch(Exception ex){ 
      System.out.println(ex.getMessage()); 
     } 
    } 

    @AfterMethod 
    public void tearDownMethod() throws Exception { 
    } 

    @Test 
    public void testGetUserInfo() throws Exception { 
     User user = new User(); 
     user.setUserId(1234); 
     HttpServletRequest request = mock(HttpServletRequest.class); 

     //this is for the static method 
     PowerMockito.mockStatic(Helper.class); 
     **PowerMockito.when(Helper.getLoggedInUser(request)).thenReturn(user);** 
     //do something 


    } 

} 

Теперь, когда я выполняю тестовый пример, и всякий раз, когда он выполняет одиночный, выделенный жирным шрифтом, он входит в статический метод и бросает исключение «Доступ имеет значение null», а не moc король метод, он выполняет метод. Есть идеи? Я также попытался раскомментировав эти строки:

//@RunWith(PowerMockRunner.class) 
//@PrepareForTest(Helper.class) 

, но еще же исключение. Благодаря

+0

Можете ли вы опубликовать версии Mockito и PowerMock, которые вы используете? – luboskrnac

ответ

0

Попробуйте раскомментировать:

//@RunWith(PowerMockRunner.class) 
//@PrepareForTest(Helper.class) 

и использовать

Mockito.when(Helper.getLoggedInUser(request)).thenReturn(user); 

я написал блог post on topic, которые содержат ссылки на рабочие примеры на GitHub. Они используют TestNg вместо JUnit, но это не имеет значения.

EDIT

Я хотел бы предложить, чтобы всегда использовать последние combination of Mockito and PowerMock available. Старые комбинации часто были довольно ошибочными с запутанными ошибками. Текущей последней комбинацией является Mockito 1.9.5-rc1 +, PowerMock 1.5+. Pre-1.5 versions of PowerMock wasn't Java7 compliant.

+0

Привет, спасибо, я это сделал, до сих пор не работает :(любая идея? – user3363969

+0

Можете ли вы отправить сообщение об ошибке с стека вызовов? – luboskrnac

+0

1.8.5 и \t орг. powermock \t powermock-апи-Mockito \t 1.4.9 user3363969

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