2015-11-26 121 views
0

我有一個問題,用JUnit測試我的Spring webflows。JUnit和Spring Webflow

正如文檔中所建議的,我編寫了一個擴展了AbstractXmlFlowExecutionTests的測試類。

public class MyFlowTest extends AbstractXmlFlowExecutionTests { 
    MockExternalContext context = new MockExternalContext(); 

    String workingDirectory = null; 

    @Override 
    protected FlowDefinitionResource  getResource(FlowDefinitionResourceFactory resourceFactory) { 
     return resourceFactory.createFileResource("WebContent/flows/myflow-flow.xml"); 
    } 

測試下的webflow繼承自定義了一些全局轉換的抽象父Webflow。所以我嘗試重寫getModelResources來提供這個父Webflow。但這根本不起作用。

@Override 
protected FlowDefinitionResource[] getModelResources(FlowDefinitionResourceFactory resourceFactory) { 
    FlowDefinitionResource[] flowDefResources = new FlowDefinitionResource[1]; 

    see below... 

    return flowDefResources; 
} 

我的具體問題是:

當我使用resourceFactory.createFileResource父流動名是不正確的,所以我得到一個例外王氏消息Unable to find flow 'main/parentflow' to inherit from

當我使用resourceFactory.createResource(String path, null, "main/parentflow"時,定義流的.xml從未找到。例外打印路徑,並說FileNotFound但路徑確實存在肯定(複製和這個路徑粘貼到編輯器 - 提前打開作品

我在做什麼錯在這裏

非常感謝 - 文件。?。

我使用彈簧的Webflow-2.3.2和JUnit 4

回答

0

所以我通過在看看AbstractXmlFlowExecutionTests源發現了問題:FlowDefinitionResourceFactory.createFileResource作品不同於resourceFactory.createResource(String path, AttributeMap attributes, String flowID)第二個是使用一個類加載器而不是一個簡單的文件加載器。所以解決方案是provi請在類路徑中找到XML文件,以便找到它。類加載器似乎不允許只打開本地機器上的任何文件。

我想我會在我的maven構建中添加一個步驟,將所有流定義複製到目標/ WEB_INF目錄,僅用於測試目的。

對我來說這似乎是醜陋的,我不明白爲什麼createResource使用這種方法。

也許有人可以提出更好的解決方案?