Ich habe eine mittelgroße Version mit einer Handvoll Anwendungen. Ich habe vor kurzem eine allgemeine Funktionalität in einer Bibliotheksanwendung innerhalb der Version umgestaltet. Dies führte dazu, dass meine EUnit-Tests mit undef
Nachrichten fehlschlugen, immer wenn etwas getestet wurde, das die Bibliotheksanwendung benötigte.Erlang EUnit Testmodul, das von einer Bibliotheksanwendung abhängt
Der Aufbau ist so etwas wie dieses:
% In apps/utils/src/utils.erl
-module(utils).
-export([foo/0]).
foo() -> "OH HAI".
Dann
% 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()
Dann werden die Unit-Tests für some_app:bar()
scheitern. Ich führe sie mit rebar eunit skip_deps=true
. Ich benutze skip_deps=true
, weil meine Version einige Anwendungen von Drittanbietern (SQL, etc) verwendet.
Ich nehme an, dass die Tests fehlschlagen, weil EUnit die zu testende App ohne ihre Abhängigkeiten aufruft? Gibt es eine Möglichkeit, das zu beheben? Ich habe die APP-Datei konfiguriert, um die Abhängigkeit explizit zu deklarieren. Es funktioniert gut in der Veröffentlichung, und es ist jetzt für etwa einen Tag ohne Problem bereitgestellt, aber ich fühle mich viel besser, wenn ich die Tests erneut passieren lassen kann :)
(Ich könnte eine Spott-App verwenden Stub utils:foo/0
, und ich kann sehen, wo das idiomatisch wäre ideal, aber das scheint in diesem Fall wie übertrieben, weil utils:foo/0
(sprich: es ist Gegenstück der realen Welt). einige wirklich einfache Sachen tut)
Ich denke, das hat nichts mit EUnit selbst zu tun, sondern wie Rebar die Tests durchführt. Entweder, weil es die anderen Anwendungen einfach nicht kompiliert, wenn Sie skip_deps verwenden, oder weil es sie nicht zum Erlang-Codepfad hinzufügt, selbst wenn sie zuvor kompiliert wurden. – RichardC
Ich denke, ich muss in die Rebar-Quelle graben, um diese herauszufinden:/I * denke * die 'skip_deps'-Flagge überspringt einfach die Komponententests im' deps'-Verzeichnis (das für 3rd-Party-Sachen verwendet wird). – dantswain
Soweit ich das an der Rebar-Quelle erkennen kann, sagt 'skip_deps' nur Rebar, Anwendungen im' deps'-Verzeichnis zu überspringen. – dantswain