建议模拟生成随机值的私有方法

时间:2012-09-14 16:39:44

标签: java hibernate easymock

在DocInfoServiceImpl中,我有以下方法,我正在尝试使用easymock进行模拟。但我不清楚如何返回使用随机uuid值(相关和docfamily)创建并从私有方法返回的docInfo对象?

public void saveDocInfo(String docId)
        {
            **DocInfo docInfo = createDocInfo(docId);**
            LOG.debug("Attempting to persist the doc info object for docId [" + docId + "]");
            docInfoDao.save(docInfo);
            LOG.debug("Persisted the doc info object for docId [" + docId + "]");
        }

        private DocInfo createDocInfo(String docId)
        {
            final DocInfo docInfo = new DocInfo();
            docInfo.setId(docId);
            docInfo.setDocFamilyUuid(UUIDGenerator.getInstance().getUuidAsString());
            docInfo.setCorrelationId(UUIDGenerator.getInstance().getUuidAsString());
            return docInfo;
        }

在我正在使用的测试中,mockDocInfoDao.save在第3行的服务的saveDocInfo中被调用。

void testSave()
    {
        def String docId = 'I19292800fe1911e0a849005056932b99'
        mockDocInfoDao.save(expectedDocInfo)
        replay(mockDocInfoDao)

        docInfoServiceImpl.saveDocInfo(docId)

        verify(mockDocInfoDao)
    }

2 个答案:

答案 0 :(得分:0)

私人方法无意进行测试,因为它们可能会发生变化。

使用EasyMock,您将检查saveDocInfo中是否至少有一次调用save。所以你可以实例化DocInfo并在testSave()

中传递它
 void testSave()     {
     def String docId = 'I19292800fe1911e0a849005056932b99'
     mockDocInfoDao.save(new DocInfo())
     replay(mockDocInfoDao)

     docInfoServiceImpl.saveDocInfo(docId)

     verify(mockDocInfoDao)
 }

答案 1 :(得分:0)

我在代码中看到的最大缺陷是使用静态方法。 它确实加强了测试任务(请参阅此视频http://www.youtube.com/watch?v=XcT4yYu_TTs)。

你能以某种方式更新UUIDGenerator类吗? 也许你可以用一个调用这个UUIDGenerator的实例方法创建一个适配器类?