2014-01-23 101 views
0

我正在使用SVN監視器,我需要模擬一個SVNRepository的實例進行測試。Java的SVNKit模擬JUnit測試

我看到這裏的代碼在另一個問題(Mock svn instance for testing svnkit tests

import static org.junit.Assert.*; 
import java.io.*; 
import org.apache.commons.io.FileUtils; 
import org.junit.*; 
import org.tmatesoft.svn.core.*; 

public class SVNTest { 

    private static final String path = "/tmp/testrepo"; 
    SVNURL tgtURL; 

    @Before 
    public void setUp() throws Exception { 
     SVNRepositoryFactoryImpl.setup(); 
     tgtURL = SVNRepositoryFactory.createLocalRepository(new File(path), true , false); 
    } 

    @After 
    public void tearDown() throws IOException { 
     FileUtils.deleteDirectory(new File(path)); 
    } 

    @Test 
    public void test() { 
     fail("Not yet implemented"); 
    } 

} 

和它的作品般的魅力,但現在我需要SVNLogEntries加入到回購... 我一直在尋找該API,但我還沒有發現任何有用的東西。有任何想法嗎?

回答

0

我終於找到了解決方案。您必須對測試回購進行一些更改,這是我爲此開發和使用的方法。

private static void fill_repo(SVNRepository repo) throws SVNException { 
     final SVNURL location = repo.getLocation(); 
     final SVNURL trunkUrl = SVNURL.parseURIEncoded(location + "/trunk"); 
     final SVNURL branchesUrl = SVNURL.parseURIEncoded(location + "/branches"); 
     SVNCommitInfo svnCommitInfo = makeDirectory(new SVNURL[]{trunkUrl, branchesUrl}, "commiting the directory"); 
     createNewFile("trunk", "new_file.txt", repo, "user_1", ""); 
     createNewFile("trunk", "test_file.txt", repo, "user_1", ""); 
     createNewFile("trunk", "another_file.txt", repo, "user_1", ""); 

     createBranchFromTrunk("Test_Branch", repo); 
     createBranchFromTrunk("Second_Branch", repo); 

     addContentToFile(repo, "branches/Test_Branch/test_file.txt", "Test Text"); 

    } 


    private static void createNewFile(String dir, String filename, SVNRepository repo, String username, String password) throws SVNException { 

     ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username, password); 
     repo.setAuthenticationManager(authManager); 

     ISVNEditor editor = repo.getCommitEditor("creating a new file", null /*locks*/, true /*keepLocks*/, null /*mediator*/); 
     editor.openRoot(-1); 
     editor.openDir(dir, -1); 
     editor.addFile(dir + "/" + filename, null, -1); 
     editor.closeFile(dir + "/" + filename, "checksum"); 
     editor.closeEdit(); 
    } 


    private static void createBranchFromTrunk(String branchName, SVNRepository repo) throws SVNException { 

     final SVNClientManager svnClientManager = SVNClientManager.newInstance(); 
     final SVNCopyClient copyClient = svnClientManager.getCopyClient(); 
     final SVNURL location = repo.getLocation(); 
     final SVNURL srcURL = SVNURL.parseURIEncoded(location + "/trunk"); 
     final SVNURL dstURL = SVNURL.parseURIEncoded(location + "/branches/" + branchName); 

     final SVNCopySource source = new SVNCopySource(SVNRevision.HEAD, SVNRevision.HEAD, srcURL); 
     copyClient.doCopy(new SVNCopySource[]{source}, dstURL, false, false, true, "Create new Branch", null); 
    } 


    private static SVNCommitInfo addContentToFile(SVNRepository repos, String pathToFile, String content) throws SVNException { 
     InputStream newContents = new ByteArrayInputStream(content.getBytes()); 
     ISVNEditor editor = repos.getCommitEditor("", null); 
     editor.openRoot(-1); 
     editor.openFile(pathToFile, -1); 
     editor.applyTextDelta(pathToFile, null); 
     String checksum = new SVNDeltaGenerator().sendDelta(pathToFile, newContents, editor, true); 
     editor.closeDir(); 
     SVNCommitInfo info = editor.closeEdit(); 
     return info; 
    }