なぜniltestを使うのか
仕様が実装・テスト・モック・Wikiに分散すると、変更のたびに同期が必要です。niltestは小さな振る舞いの例を実装の隣へ戻します。
- 関数を開くだけで、代表的な入力と期待結果が分かる
- 外部サービスがない開発環境でも、固定結果ですぐ動かせる
- 同じケースで本物の実装を確認し、重複を減らせる
30秒で分かる基本形
@scenario を付け、if expect: 内にケースを書きます。通常のPython関数なので、実装はその下へ続けます。
python
import niltest
from niltest import Mode, expect, scenario
niltest.configure(mode=Mode.TEST) # @scenarioより前
@scenario("配送料")
def shipping_fee(subtotal: int, premium: bool = False) -> int:
if expect:
expect.case(
"プレミアム会員は無料",
given={"subtotal": 1_000, "premium": True},
returns=0,
)
return 0 if premium or subtotal >= 5_000 else 500こんな場面に向いています
- 外部APIやDBを使う関数の代表例を共有したい
- 仕様とテストの食い違いを減らしたい
- 乱数やIDを型・条件で柔軟に検証したい
- 小さなPythonライブラリや業務ロジックを説明しやすくしたい