2013-05-09 4 views
0

조롱 된 서비스 추가하여 요소를 추가 한 후 getBy() 메서드를 모의하려고합니다.Mockito 조롱 데이터베이스 서비스에서 메서드를 얻을

이 내가 무엇을 가지고 :

나는 다음과 같은 오류 얻을 그러나
FeedItem feedItem = feedServiceTested.createFeedItem("Text Test", "Category Test", "Author Test"); 
     Mockito.verify(feedRepository).add(feedItem); 

     Mockito.verify(feedRepository).findAllByCategory("Category Test"); 

:

Wanted but not invoked: 
feedRepository.findAllByCategory(
    "Category Test" 
); 
-> at ie.cit.adf.services.FeedServiceImplTest.testSearchFeedItemsByCategory(FeedServiceImplTest.java:55) 

However, there were other interactions with this mock: 
-> at ie.cit.adf.services.FeedServiceImpl.createFeedItem(FeedServiceImpl.java:44) 

    at ie.cit.adf.services.FeedServiceImplTest.testSearchFeedItemsByCategory(FeedServiceImplTest.java:55) 

어떤 생각이 어떻게 (이 findAllByCategory을 조롱하기를)?

저장소 :

@Secured("ROLE_USER") 
public class JdbcFeedRepository implements FeedRepository { 

    private JdbcTemplate jdbcTemplate; 
    private FeedItemsMapper feedItemsMapper = new FeedItemsMapper(); 

    public JdbcFeedRepository(DataSource dataSource) { 
     jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    @Override 
    public FeedItem findById(String feedItemId) { 
     return jdbcTemplate.queryForObject(
      "SELECT ID, TEXT, CATEGORY, AUTHOR FROM FEEDITEMS WHERE ID=?", 
      feedItemsMapper, 
      feedItemId 
     ); 
    } 

    @Override 
    public List<FeedItem> findAll() { 
     return jdbcTemplate.query(
      "SELECT ID, TEXT, CATEGORY, AUTHOR FROM FEEDITEMS", 
      feedItemsMapper 
     ); 
    } 

    @Override 
    public List<FeedItem> findAllByCategory(String category) { 
     return jdbcTemplate.query(
       "SELECT ID, TEXT, CATEGORY, AUTHOR FROM FEEDITEMS WHERE CATEGORY=?", 
       feedItemsMapper, 
       category 
      ); 
    } 

    @Override 
    public List<FeedItem> findAllByAuthor(String author) { 
     return jdbcTemplate.query(
      "SELECT ID, TEXT, CATEGORY, AUTHOR FROM FEEDITEMS WHERE AUTHOR=?", 
      feedItemsMapper, 
      author 
     ); 
    } 

    @Override 
    public void add(FeedItem feedItem) { 
     jdbcTemplate.update(
      "INSERT INTO FEEDITEMS VALUES(?,?,?,?)", 
      feedItem.getId(), 
      feedItem.getText(), 
      feedItem.getCategory(), 
      feedItem.getAuthor() 
     ); 
    } 

    @Override 
    public void delete(String feedItemId) { 
     jdbcTemplate.update("DELETE FROM FEEDITEMS WHERE ID=?", feedItemId); 
    } 

    /** 
    * Returns the name of the currently logged in Author. 
    * 
    * @return String 
    */ 
    private String getCurrentUser() { 
     return SecurityContextHolder.getContext().getAuthentication().getName(); 
    } 

} 

class FeedItemsMapper implements RowMapper<FeedItem> { 
    @Override 
    public FeedItem mapRow(ResultSet rs, int rowNum) throws SQLException { 
     FeedItem feedItem = new FeedItem(); 
     feedItem.setId(rs.getString("ID")); 
     feedItem.setText(rs.getString("TEXT")); 
     feedItem.setCategory(rs.getString("CATEGORY")); 
     feedItem.setAuthor(rs.getString("AUTHOR")); 
     return feedItem; 
    } 
} 

서비스 :

feedRepository.findAllByCategory("Category Test"); 

그러나 당신이 추가 :

@Transactional 
public class FeedServiceImpl implements FeedService { 

    private FeedRepository repo; 

    public FeedServiceImpl(FeedRepository repo) { 
     this.repo = repo; 
    } 

    @Override 
    public FeedItem get(String feedItemId) { 
     return repo.findById(feedItemId); 
    } 

    @Override 
    public List<FeedItem> getAllFeedItems() { 
     return repo.findAll(); 
    } 

    @Override 
    public List<FeedItem> getAllFeedItemsByCategory(String category) { 
     return repo.findAllByCategory(category); 
    } 

    @Override 
    public List<FeedItem> getAuthorFeedItems(String author) { 
     return repo.findAllByAuthor(author); 
    } 

    @Override 
    public FeedItem createFeedItem(String text, String category, String author) { 
     FeedItem feedItem = new FeedItem(); 
     feedItem.setText(text); 
     feedItem.setCategory(category); 
     feedItem.setAuthor(author); 

     repo.add(feedItem); 

     return feedItem; 
    } 

    @Override 
    public void delete(String feedItemId) { 
     repo.delete(feedItemId); 
    } 

} 
+0

테스트는 기본적으로 합리적인 것처럼 보입니다. 테스트 할 메소드를 보여줄 수 있습니까? - feedServiceTested.createFeedItem? –

+0

업데이트 된 원본 게시물을 확인하십시오. –

+0

여전히 테스트 코드에서 사용되는 createFeedItem 메서드는 포함되어 있지 않습니다. –

답변

2

그것은 당신의 코드가 절대 호출되지 보인다 여기

은 2 개 클래스입니다 그것에 대한 검증 자. Mockito verify는 테스트에서 메서드가 한 번 호출되는지 확인합니다. 이것이 일어나지 않을 때 그것의 예외는 예외를 가지고 불평한다.

테스트 전화 : 만의 repo에 다음과 같은 방법을 호출

feedServiceTested.createFeedItem(...) 

:

add(feedItem) 

첫 번째 확인할 수 있습니다. 그래서 당신의 코드는 findAllByCategory를 사용하지 않았고 그래서 verify는이 예외를 던졌습니다.

또는 Repo에 대한 FeedItem 호출이 있습니까? 그런 다음이 클래스의 코드도 제공하십시오.

+0

나는 2 클래스 –

+0

와 게시물을 업데이 트하고 그리고 난 당신의 클래스 FeedItem ist 그냥 모든 논리 또는 다른 클래스에 대한 호출없이 바보 같은 자바 객체 겠지? 그냥 게터와 세터? – mszalbach

+0

맞습니다. 유일한 논리는 다음과 같이 객체의 id를 설정하는 것입니다. UUID.randomUUID(). toString(); –

관련 문제