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

プライベート メソッドは変更される可能性があるため、テストすることを意図していません。

EasyMock を使用すると、saveDocInfo で保存の呼び出しが少なくとも 1 回あるかどうかを確認できます。したがって、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 に答える
0

コードに見られる最大の欠陥は、静的メソッドの使用です。テスト タスクが非常に難しくなります (このビデオhttp://www.youtube.com/watch?v=XcT4yYu_TTsを参照)。

何とか UUIDGenerator クラスを更新できますか? この UUIDGenerator を呼び出すインスタンス メソッドを使用してアダプタ クラスを作成できますか?

于 2012-09-25T15:45:44.143 に答える