2014-07-16 38 views
0

我创建了我的第一批阅读器,并打算用mockito测试我的课程。我不知道如何完全做到这一点。下面你会发现我的课程“Trailreader”和我开始开发的测试课“Trailreadertest”。我事先感谢您的帮助。如何使用mockito编写批量阅读器的单元测试

Trailreader类:

public class Trailreader implements ItemReader<TrailreaderInfo> { 

    private static final Logger LOG = LoggerFactory.getLogger(Trailreader.class); 
    private static final int LIMIT = 10; 

    @Value("#{configurationBatch.limit}") 
    public String limitString; 

    public String tableName; 
    public int nbLimit; 
    public List<Long> listToDelete; 

    @Inject 
    @Named("trailDao") 
    public transient ITrailDao trailDao; 

    public Trailreader() { 
     super(); 
    } 

    /** 
    * Initialize 
    */ 
    @PostConstruct 
    public void initialize() { 

     try { 
      nbLimit = Integer.parseInt(limitString); 
     } catch (NumberFormatException e) { 
      nbLimit = LIMIT; 
     } 
    } 


    @DoNotLog 
    @Transactional 
    @Override 
    public TrailreaderInfo read() throws Exception, UnexpectedInputException, NonTransientResourceException { 
     try { 
      List<String> tableList = trailDao.getTablesList(); 
      for (String tableName : tableList) { 
       List<Long> list_id = trailDao.getlist_idByDate(tableName); 
       List<Long> listToDelete = new ArrayList<Long>(); 
       if (list_id.size() > nbLimit) { 
        int list_id_size = list_id.size(); 
        int j = 0; 
        while (list_id_size > nbLimit) { 
         listToDelete.add(list_id.get(j)); 
         list_id_size--; 
         j++; 
        } 
       } 
      } 
      return new TrailreaderInfo(tableName, nbLimit, listToDelete); 
     } catch (Exception e) { 
      LOG.error(e.getClass().getName(), e.getMessage()); 
      throw new ParseException(e.getMessage()); 
     } 
    } 
} 

测试类:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:test-applicationContext.xml" }) 
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) 
public class TrailreaderTest { 
    private static final Logger LOG = LoggerFactory.getLogger(TrailreaderTest.class); 

    @InjectMocks 
    protected transient Trailreader reader; 

    @Inject 
    @Named("trailDao") 
    protected transient ITrailDao trailDao; 

    @Before 
    public void setUp() throws Exception { 
     LOG.info(TrailreaderTest.class.getSimpleName()); 
    } 

    /** 
    * Initialization method 
    */ 
    @Transactional(value = Transactions.TX_MANAGER_READ_WRITE, readOnly = false) 
    protected void initialization() { 
     reader.trailDao = trailDao; 
     reader.limitString = "10"; 
     reader.nbLimit = 10; 

     reader.initialize(); 
    } 

    @Test 
    public void HistoryBackOfficeInfo() { 
     initialization(); 
    } 
} 
+2

欢迎来到SO!你已经发布了一切我们需要帮助你的东西,但有一件事:你的问题是什么。你卡在哪里?或...为什么测试不起作用? –

+0

我的问题是我不知道如何测试我的课程。什么变量被初始化?如何测试读取方法?比较结果和预期的结果?谢谢你的帮助 – user3612284

+0

如果你正在使用mockito,你应该模拟'Trailreader'依赖项('ITrailDao')并存根'ITrailDao :: getTablesList'和'ITrailDao :: getlist_idByDate'方法。 – gontard

回答

0

如果你想测试你的ItemReader那么你需要模拟它的依赖不是对象本身。

所以你需要模拟DAO。因此,您可以在DAO返回空值或空列表或某些特定值的情况下测试阅读器...

相关问题