引入
最近公司有用到apose这款商业软件来处理word水印绘制,除了付费问题,aspose是否能在国产化环境下稳定运行也是一个问题(会不会调用native),对于我们来说,如果有影响,需要优先考虑POI。
Aspose.Word for Java
官方仓库: Aspose.Words for Java
这里主要介绍一下,如何把官方提供的单元测试打包成jar再执行。
官方的单元测试用到的框架是TestNG,具体不多做介绍。不过官方仓库没有提供可执行的套件xml,所以需要自己写一份。我再后面会提供一个简单的test.xml
打包具体步骤:
- 从官网上把测试用例克隆下来(最后打包ApiExamples就行)
- 本地使用idea打开(我使用的是idea 2022)
- 添加一个test.xml文件
我这个比较简单,就是包含所有的测试类,可以自己自定义
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Testing Google Apps">
<test name="Regression">
<classes>
<class name="Examples.ExAbsolutePositionTab"/>
<class name="Examples.ExBookmarks"/>
<class name="Examples.ExBookmarksOutlineLevelCollection"/>
<class name="Examples.ExBorder"/>
<class name="Examples.ExBorderCollection"/>
<class name="Examples.ExBuildingBlocks"/>
<class name="Examples.ExBuildVersion"/>
<class name="Examples.ExCellFormat"/>
<class name="Examples.ExCertificateHolder"/>
<class name="Examples.ExCharts"/>
<class name="Examples.ExChmLoadOptions"/>
<class name="Examples.ExCleanupOptions"/>
<class name="Examples.ExComment"/>
<class name="Examples.ExCompatibilityOptions"/>
<class name="Examples.ExControlChar"/>
<class name="Examples.ExDigitalSignatureCollection"/>
<class name="Examples.ExDigitalSignatureUtil"/>
<class name="Examples.ExDocSaveOptions"/>
<class name="Examples.ExDocument"/>
<class name="Examples.ExDocumentBase"/>
<class name="Examples.ExDocumentBuilder"/>
<class name="Examples.ExDocumentBuilderImages"/>
<class name="Examples.ExDocumentProperties"/>
<class name="Examples.ExDocumentVisitor"/>
<class name="Examples.ExDotNetVsJava"/>
<class name="Examples.ExDrawing"/>
<class name="Examples.ExEditableRange"/>
<class name="Examples.ExField"/>
<class name="Examples.ExFieldOptions"/>
<class name="Examples.ExFile"/>
<class name="Examples.ExFont"/>
<class name="Examples.ExFontSettings"/>
<class name="Examples.ExFormFields"/>
<class name="Examples.ExHeaderFooter"/>
<class name="Examples.ExHtmlFixedSaveOptions"/>
<class name="Examples.ExHtmlLoadOptions"/>
<class name="Examples.ExHtmlSaveOptions"/>
<class name="Examples.ExHyphenation"/>
<class name="Examples.ExImage"/>
<class name="Examples.ExImageSaveOptions"/>
<class name="Examples.ExInline"/>
<class name="Examples.ExInlineStory"/>
<class name="Examples.ExLayout"/>
<class name="Examples.ExLicense"/>
<class name="Examples.ExLists"/>
<class name="Examples.ExLoadOptions"/>
<class name="Examples.ExMailMerge"/>
<class name="Examples.ExMailMergeCustom"/>
<class name="Examples.ExMailMergeEvent"/>
<class name="Examples.ExMarkdownSaveOptions"/>
<class name="Examples.ExMetered"/>
<class name="Examples.ExMossDoc2Pdf"/>
<class name="Examples.ExMossRtf2Docx"/>
<class name="Examples.ExNode"/>
<class name="Examples.ExNodeImporter"/>
<class name="Examples.ExOdtSaveOptions"/>
<class name="Examples.ExOoxmlSaveOptions"/>
<class name="Examples.ExPageSetup"/>
<class name="Examples.ExParagraph"/>
<class name="Examples.ExParagraphFormat"/>
<class name="Examples.ExPclSaveOptions"/>
<class name="Examples.ExPdfSaveOptions"/>
<class name="Examples.ExPlainTextDocument"/>
<class name="Examples.ExPsSaveOptions"/>
<class name="Examples.ExRange"/>
<class name="Examples.ExRenameMergeFields"/>
<class name="Examples.ExRendering"/>
<class name="Examples.ExReplaceHyperlinks"/>
<class name="Examples.ExReportingEngine"/>
<class name="Examples.ExRevision"/>
<class name="Examples.ExRtfLoadOptions"/>
<class name="Examples.ExRtfSaveOptions"/>
<class name="Examples.ExSavingCallback"/>
<class name="Examples.ExSection"/>
<class name="Examples.ExShape"/>
<class name="Examples.ExSignDocumentCustom"/>
<class name="Examples.ExSmartTag"/>
<class name="Examples.ExStructuredDocumentTag"/>
<class name="Examples.ExStyles"/>
<class name="Examples.ExSvgSaveOptions"/>
<class name="Examples.ExTable"/>
<class name="Examples.ExTableColumn"/>
<class name="Examples.ExTabStop"/>
<class name="Examples.ExThemes"/>
<class name="Examples.ExTxtLoadOptions"/>
<class name="Examples.ExTxtSaveOptions"/>
<class name="Examples.ExUtilityClasses"/>
<class name="Examples.ExVariableCollection"/>
<class name="Examples.ExVbaProject"/>
<class name="Examples.ExViewOptions"/>
<class name="Examples.ExWordML2003SaveOptions"/>
<class name="Examples.ExXamlFixedSaveOptions"/>
<class name="Examples.ExXamlFlowSaveOptions"/>
<class name="Examples.ExXpsSaveOptions"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
- 因为需要用控制台执行jar包,给工程添加一个入口类
我这个就是调套件执行
public class TestEntrance {
public static void main(String[] args) {
TestNG testNG = new TestNG();
List<String> suites = new ArrayList<>();
suites.add("test.xml");//此处为xml的绝对路径
testNG.setTestSuites(suites);
testNG.run();
}
}
- 打开file -> project structure -> artifacts,添加一个jar
选择module和Main Class,Main Class就选上面提供的TestEntrance,勾选上include tests
然后一路ok,创建artifact - 编译artifact,build -> build artifacts
- 然后去文件夹下找打包好的jar,把上面提供的test.xml,放在与jar包同级的目录下
- 执行【java -jar …/ApiExamples-Tests.jar】
- 执行结果:
我这里执行,发现失败的用例有很多,但是具体原因还没找到,欢迎分享。
可能遇到的问题
报错:
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes