開発モードはインポート前に有効化

Pythonのデコレータはモジュール読込時に評価されます。testまたはmockを使う場合は、対象モジュールを読み込む前にNILTEST_MODEを設定してください。CLIは自動的にtestを選んでからモジュールを読み込みます。

python
# Python: importする前に設定
from niltest import Mode, configure
configure(mode=Mode.TEST)

# macOS / Linux
NILTEST_MODE=test python app.py

# Windows PowerShell
$env:NILTEST_MODE = "test"; python app.py

呼び出し時コストがゼロの宣言型API

既存の if expect: はそのまま利用できます。関数内の真偽判定もなくしたい場合は、case()@docs で関数の外側に宣言します。

@scenario を外側、@docs を内側に置いてください。既定のproductionでは元関数がそのまま返り、実行時のラッパーもniltest由来の分岐もありません。

python
from niltest import case, docs, scenario

@scenario("配送料")
@docs(case("プレミアム会員", given={"premium": True}, returns=0))
def shipping_fee(premium: bool) -> int:
    return 0 if premium else 500

正確な性能保証

productionモードではscenarioラッパーを生成しません。expect.caseの引数辞書も生成されません。

ソースに書いた if expect: の真偽判定コストは残ります。完全なゼロコストではなく、予測可能な最小経路です。

対象環境で測る

shell
python benchmark_production.py