少数のアプリケーションを含む中規模のリリースがあります。私は最近、いくつかの一般的な機能をリリース内のライブラリ アプリケーションにリファクタリングしました。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
(読む: 現実世界の対応物です) はいくつかの本当に単純なことを行うからです。)