【问题标题】:Java SVNKit Mock for JUnit tests用于 JUnit 测试的 Java SVNKit Mock
【发布时间】:2014-01-23 18:55:26
【问题描述】:

我正在开发一个 SVN 监视器,我需要模拟一个 SVNRepository 的实例以进行测试。

我在另一个问题 (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 添加到 repo... 我一直在寻找 API,但还没有发现任何有用的东西。有什么想法吗?

【问题讨论】:

    标签: java unit-testing junit mocking svnkit


    【解决方案1】:

    我终于找到了解决办法。您必须对测试存储库进行一些更改,这是我为此开发和使用的方法。

        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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多