在露天。如何创建临时文件进行测试?
In Alfresco. How can I create a temporary file for testing?
我的想法是在测试中创建一个文件然后删除它,但是我的代码失败了
我的代码:
@RunWith(RemoteTestRunner.class)
@Remote(runnerClass=SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:alfresco/application-context.xml")
public class FooTest {
private static final String ADMIN_USER_NAME = "admin";
@Autowired
@Qualifier("NodeService")
protected NodeService nodeService;
@Autowired
private FileFolderService fileFolderService;
@Autowired
protected Repository repositoryHelper;
@Test
public void testCreateTempFile() {
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER_NAME);
NodeRef root = repositoryHelper.getSharedHome();
// create the node
// this line throw an exception
FileInfo fileInfo = fileFolderService.create(root,
"foo.txt", ContentModel.PROP_CONTENT);
...
}
}
出现如下错误:
org.alfresco.error.AlfrescoRuntimeException: 07170002 Transaction must
be active and synchronization is required: Thread[main,5,main] at
org.alfresco.util.transaction.TransactionSupportUtil.registerSynchronizations(TransactionSupportUtil.java:188)
交易如何运作?如何激活它?
您尝试过使用 @Transactional
注释吗?
@Test
@Transactional
public void testCreateTempFile() {
....
这应该可以解决您的问题。
为了使用临时文件,alfresco 提供了一个实用程序 class
org.alfresco.util.TempFileProvider
它具有允许您创建临时文件和目录的所有 API。
如果您经常使用临时文件,您甚至可以考虑使用此 utility,它允许您定期清除临时文件。
我找到了解决方案:
RetryingTransactionHelper transactionHelper = transactionService.getRetryingTransactionHelper();
final String filename = "TestSite" + System.currentTimeMillis();
NodeRef noderef = transactionHelper.doInTransaction(new RetryingTransactionCallback<NodeRef>() {
public NodeRef execute() throws Throwable {
final NodeRef parent = repositoryHelper.getCompanyHome();
FileInfo fileInfo = fileFolderService.create(parent, filename, ContentModel.PROP_CONTENT);
NodeRef node = fileInfo.getNodeRef();
ContentWriter writer = contentService.getWriter(node, ContentModel.PROP_CONTENT, true);
writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
writer.setEncoding("UTF-8");
writer.putContent(content);
return node;
}
});
在 Junit 中必须使用事务来创建文件。
我的想法是在测试中创建一个文件然后删除它,但是我的代码失败了
我的代码:
@RunWith(RemoteTestRunner.class)
@Remote(runnerClass=SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:alfresco/application-context.xml")
public class FooTest {
private static final String ADMIN_USER_NAME = "admin";
@Autowired
@Qualifier("NodeService")
protected NodeService nodeService;
@Autowired
private FileFolderService fileFolderService;
@Autowired
protected Repository repositoryHelper;
@Test
public void testCreateTempFile() {
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER_NAME);
NodeRef root = repositoryHelper.getSharedHome();
// create the node
// this line throw an exception
FileInfo fileInfo = fileFolderService.create(root,
"foo.txt", ContentModel.PROP_CONTENT);
...
}
}
出现如下错误:
org.alfresco.error.AlfrescoRuntimeException: 07170002 Transaction must be active and synchronization is required: Thread[main,5,main] at org.alfresco.util.transaction.TransactionSupportUtil.registerSynchronizations(TransactionSupportUtil.java:188)
交易如何运作?如何激活它?
您尝试过使用 @Transactional
注释吗?
@Test
@Transactional
public void testCreateTempFile() {
....
这应该可以解决您的问题。
为了使用临时文件,alfresco 提供了一个实用程序 class
org.alfresco.util.TempFileProvider
它具有允许您创建临时文件和目录的所有 API。
如果您经常使用临时文件,您甚至可以考虑使用此 utility,它允许您定期清除临时文件。
我找到了解决方案:
RetryingTransactionHelper transactionHelper = transactionService.getRetryingTransactionHelper();
final String filename = "TestSite" + System.currentTimeMillis();
NodeRef noderef = transactionHelper.doInTransaction(new RetryingTransactionCallback<NodeRef>() {
public NodeRef execute() throws Throwable {
final NodeRef parent = repositoryHelper.getCompanyHome();
FileInfo fileInfo = fileFolderService.create(parent, filename, ContentModel.PROP_CONTENT);
NodeRef node = fileInfo.getNodeRef();
ContentWriter writer = contentService.getWriter(node, ContentModel.PROP_CONTENT, true);
writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
writer.setEncoding("UTF-8");
writer.putContent(content);
return node;
}
});
在 Junit 中必须使用事务来创建文件。