6

少数のアプリケーションを含む中規模のリリースがあります。私は最近、いくつかの一般的な機能をリリース内のライブラリ アプリケーションにリファクタリングしました。undefこれにより、ライブラリ アプリケーションを必要とするものをテストするたび に、EUnit テストがメッセージで失敗しました。

セットアップは次のようなものです。

% In apps/utils/src/utils.erl
-module(utils).

-export([foo/0]).

foo() -> "OH HAI".

それで

% In apps/some_app/src/some_app.erl
-module(some_app).

-export([bar/0]).

bar() -> io:format("foo: ~s~n", [utils:foo()]).

% unit tests for bar()

次に、単体テストがsome_app:bar()失敗します。私はそれらを実行していrebar eunit skip_deps=trueます。私skip_deps=trueのリリースではサードパーティのアプリケーション (SQL など) を使用しているため、使用しています。

EUnitが依存関係なしでテスト対象のアプリを呼び出しているため、テストが失敗し始めると思いますか? これを修正する方法はありますか?依存関係を明示的に宣言するように .app ファイルを構成しました。リリースでは問題なく動作し、問題なく展開されてから約 1 日経ちましたが、テストに再び合格できれば、気分はずっと良くなります :)

(モッキング アプリを使用して をスタブ化するutils:foo/0こともできます。それが慣用的に理想的な場所であることがわかりますが、この場合はやり過ぎのように思えます。なぜなら、utils:foo/0(読む: 現実世界の対応物です) はいくつかの本当に単純なことを行うからです。)

4

2 に答える 2

0

次のように、.appファイルのアプリケーション部分にユーティリティを含めることで、アプリケーションの1つにユーティリティをロードさせることができると思います。

{application,yourapp
         [{description,"A description"},
          {vsn,"1.0.0"},
          {modules,[mod1, mod2, utils]},
           SNIP

または、他の方法でそれを erlang ノードのパスに追加します...おそらく、ノードの開始時に -pa フラグを使用します。

于 2012-11-10T21:35:47.323 に答える