2

在 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)
    }
4

2 回答 2

0

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

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

于 2012-09-25T15:45:44.143 回答
0

私有方法并不意味着要进行测试,因为它们可能会发生变化。

使用 EasyMock,您将检查 saveDocInfo 中是否至少调用了一次保存。所以你可以实例化 DocInfo 并将它传递给 testSave()

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

     docInfoServiceImpl.saveDocInfo(docId)

     verify(mockDocInfoDao)
 }
于 2012-09-14T16:57:01.130 回答