2017-01-29 19 views
0

私はプロジェクトを設定しました。私はそれをテストしたいと思います。今問題はデータベースでのプロダクション作業での私の機能ですが、テストではそれらを偽のデータベースに向けることにしました。haskell自動テスト設定

たとえば、私は文字列mongoHostAdress = "192.168.0.1"を使用して、mongoデータベースにアクセスします。テストするときは、mongoHostAdress = "127.0.0.1"に変更します。

私はこれを自動的に行うようにHaskellに指示できますか?

編集:より一般的な見通し

は、どのように私はプロジェクトの設定ファイルを作成し、プロジェクトの異なるステージに異なるのparamsを使用することができますか?

+0

おそらくそれは次のようになりアドレスをハードコードして代わりに環境変数に格納しない方が良いでしょう。 12因子アプリ宣言のパートIII:https://12factor.net/config – danidiaz

+0

@danidiazこれは私が欲しいものです。どのようにghcにyamlというファイルからいくつかのオプションを読んで指示することができますか? yamlファイルはhaskellの標準ですか?あなたが知っている、私が知らないこれらの種類のもの。 –

+0

'aeson'パッケージhttp://hackage.haskell.org/package/aesonは、JSONの解析に使用できます。 'yaml'パッケージは' aeson'と同じメモリ内表現を使用し、YAMLファイルを読むことができますhttp://hackage.haskell.org/package/yaml-0.8.21.2/docs/Data-Yaml.html#v:decodeFile 。 'System.Environment'をインポートして環境変数を読み込むこともできます。 https://hackage.haskell.org/package/base-4.9.1.0/docs/System-Environment.html 'configurator-ng'パッケージも参照してください。https://hackage.haskell.org/package/configurator-ng – danidiaz

答えて

3

ので、コンセプトは次のようになりますどのINPUT.TXTファイルを作成している:今のメイン関数の内部で使用すると、簡単にこのような構成を使用して、あなたのparamsを設定することができ

fstParameterName:fstParameterValue 
sndParameterName:sndParameterValue 
trdParameterName:trdParameterValue 

を:

main = do 
text <- readFile "input.txt" 
mongoHostAdress <- (getConfigValue "mongoHostAdress" (lines text)) 
print(mongoHostAdress) 

getConfigValue name (l:ls) = if(containsPrefix name l) 
    then (return(skipPrefix name l)) 
    else (getConfigValue name ls) 

containsPrefix [] x = True 
containsPrefix (x:xs) (y:ys) = if(x==y) then (containsPrefix xs ys) else False 

skipPrefix [] (x:xs) = xs --x is just ":" and ofc we dont want it 
skipPrefix (x:xs) (y:ys) = skipPrefix xs ys 
+0

1つのことが残っています、どのようにこれらのconfigsを利用できるようにするのですか? –

+0

main関数内のすべてのデータを読み込み、追加のパラメータでプログラムで使用している関数を実行するだけです。それはあなたのための良い解決策ですか? –

+0

が可能ではありません、私はすべての機能とテストのためにどこからでもこれらの設定を利用できるようにしたいと思います。 –