2017-10-16 71 views

回答

1

方法Shell#evaluate()已經公開並且具有其特定的職責(僅評估一個命令)就是爲了這個目的。如果您覺得我們應該提供更多(關於測試肯定需要寫的文檔章節),請爲項目創建一個問題

+0

謝謝。我會在項目中提出一個關於添加章節的問題。 – user2153465

+0

查看此鏈接瞭解更多信息:https://github.com/spring-projects/spring-shell/issues/171 –

0

這是我如何得到這個工作。

您首先需要重寫默認的shell應用程序運行程序以避免卡住jline循環。

@Component 
public class CliAppRunner implements ApplicationRunner { 
    public CliAppRunner() { 

    } 

    @Override 
    public void run(ApplicationArguments args) throws Exception { 
     //do nothing 
    } 


} 

請注意,你將不得不這種自定義應用程序對亞軍「測試」的個人資料相關聯,因此在集成測試階段只覆蓋:您可以通過定義自己,如做到這一點。

如果你想測試一個shell命令「加1 3」,那麼你可以寫這樣一個測試:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes =CliConfig.class) 
public class ShellCommandIntegrationTest { 

    @Autowired 
    private Shell shell; 

    @Test 
    public void runTest(){ 


     Object result=shell.evaluate(new Input(){ 
      @Override 
      public String rawText() { 
       return "add 1 3"; 
      } 

     }); 

     DefaultResultHandler resulthandler=new DefaultResultHandler(); 
     resulthandler.handleResult(result); 


    } 


} 

注意上面的測試並不能斷言什麼。您可能必須編寫自己的ResultHandler接口的小實現來處理結果的解析/格式化,以便可以聲明它。

希望它有幫助。

+0

我嘗試了幾個星期的時間,採用稍微不同的方法,它對我很有幫助。 [這裏](https://github.com/indrabasak/spring-shell-example)就是我的例子。 –