2017-08-20 5 views
2

Ich habe einen Java-Unit-Test, der eine Machine Learning Model-Datei verwenden wird, rufen Sie model.bin, die aus einer einfachen Textdatei von einem externen Tool erstellt wird (rufen Sie model-builder, bereits durch eine C++ Regel gebaut). Während es sinnvoll wäre, eine genrule zu definieren, wird deps (model.bin & model-builder in meinem Fall) nicht unterstützt. Ich sehe zwei Optionen:Machine Learning Model Test

  • Machen Sie meinen Testcode Build model.bin Datei. Konzeptionell ist dies nicht wirklich das, was ich testen möchte (ich möchte testen, das Prebuild-Modell zu lesen).
  • Implementieren Sie eine benutzerdefinierte Erweiterung rule, die ./model-builder --in my-input.txt --out model.bin` ausführt.

Was ist die beste Praxis in Bazel?

Antwort

2

Von Ihrer Beschreibung glaube ich, dass eine Genrule die beste Route ist. Auch wenn Genrule Deps hat, klingt es wie model.bin ist Ihre generierte Datei und würde Sinn machen als out. model-builder sieht aus wie das Werkzeug, um Ihre Datei zu generieren und würde als eine Genrule tool Sinn machen.

So etwas wie eine BUILD Datei sollte funktionieren.

genrule(
    name = "model-bin", 
    srcs = ["//path/to:my-input.txt"], 
    outs = ["model.bin"], 
    tools = ["//path/to:model-builder"], 
    cmd = "$(location //path/to:model-builder) --in $< --out [email protected]" 
)