2014-10-30 58 views
2

我有一個使用腳本語言編寫的命令行應用程序。啓動腳本確實是這樣的:如何測試啓動我的應用程序的方法?

import 'App' 
app = new App() 
app.run() 

run()方法負責實例化所需的所有對象,然後開始實際應用:

import 'Artist', 'Song', 'Listener' 

class App 
    method run() 
    artist = new Artist() 
    song = new Song() 
    listener = new Listener(artist, song) 
    listener->listen() 
    end 
end 

我如何寫一個測試,以確保run()正在做它應該做的事情?

我最初的想法是,添加一個可選的參數,這樣我可以傳遞的Listener模擬效果和預期listen()被調用,但在運行應用程序時,它並沒有告訴我,如果實際的監聽器類將被正確實例。

另一個想法是將所有的對象傳遞給run(),但是我必須在啓動腳本上創建它們,我也必須測試它,並且出現同樣的問題。

+0

「確保run()正在做它應該做的事情「。首先描述它應該做什麼? – Alderven 2014-10-30 14:15:20

+0

@ClickBerry究竟是什麼在該代碼中:實例化所需的對象並調用'listen()' – Schrute 2014-10-30 14:21:53

+0

@Schrute那麼'listen()'應該做什麼? – 2014-10-31 11:04:30

回答

1

我會說不要測試對象是否被正確創建。我假設你在自己的單元測試中測試Listener類的構造函數。鑑於我會說你可以信任解釋器來正確構建你的對象。如果你想測試解釋器可以構造類,那麼你正在測試你的腳本語言而不是你的應用程序。

如果你想在功能上測試App類,這將意味着檢查listen()已經做了它應該做的任何事情。你如何做,反過來又取決於listen()應該做什麼。

另一種選擇是公開你需要測試的東西,當然有很多關於改變你的代碼的參數使它更容易測試。我不會在這裏進入他們。但是你可以在App中暴露你的Listener類,這樣你就可以在測試中查詢它。

[輕微旁白:一些語言提供公開屬性,以特定的組件,讓您不必公開公開屬性(internalsvisibleto,我看着你C#)做的手段。]

相關問題