はじめに
今回は JetBrains AI でテスト修正を行った内容をご紹介いたします。
JavaのInvoiceCalculatorで割引機能を追加したら、用意しておいたテストが通らなくなりました。今回は、JetBrains AIのAI chat を使って解決してみたという内容です。
何が起きていたか
このクラスはの検証用に置いていたデモ向けのもので、calculateRetailTotal() などの単純な金額計算メソッドが並ぶだけのクラスです。
今回はそこに applyDiscount() を1つ追加しました。
// 割引機能を作る途中で追加したヘルパー
public int applyDiscount(int total, int discountPercent) {
return total * ((100 - discountPercent) / 100);
}
テストはこうです。
@Test
void retailDiscount20PercentOff() {
// 1000 の 20% off → 800 のはず
InvoiceCalculator calc = new InvoiceCalculator();
assertEquals(800, calc.applyDiscount(1000, 20));
}
AI Chat に聞く
JetBrains AI Assistant の AI Chatを開き、3点をまとめてチャットに貼りました。
return total * ((100 - discountPercent) / 100);
括弧の内側が先に計算されるので、まず 80 / 100 が実行されます。Java では int どうしの割り算は小数点以下が切り捨てられるため、これは 0.8 ではなく 0。結果、式全体が total * 0 = 0 になっていました。
AI の提案は「内側の括弧を外して、割り算より先に掛け算をする」。
public int applyDiscount(int total, int discountPercent) {
return total * (100 - discountPercent) / 100; // 1000 * 80 / 100 = 800
}
修正してRun し直すと、テストが通りました。✅
渡す情報がすべて
Expected :800 / Actual :0 の1行だけを貼ると、AI は「テスト側が間違っている」と思い込み、assertEquals(0, ...) への書き換えを勧めてきます。
テスト・メソッド本体・失敗内容の3点をそろえて渡す。 ことで正確な回答を得られました。
最終確認はテスト。 AI の回答を実際に Run してテストが通るまで。
まとめ
今回はJetBrains のAI Chatを使ってテスト修正を行いました。
- 失敗した1行だけでなく、テスト・対象メソッド・Expected/Actual をまとめて貼る。情報が少ないと、AI は「テスト側が間違っている」と早合点しがちです。
- 修正コードだけで満足せず、「なぜ間違ったか」まで聞いて、最後は自分で
Runして確かめる。
ナットウシステムからのお知らせ
弊社は JetBrains 製品に関するご質問、ご相談等を受け付けております。弊社のXまたはメールでご連絡ください。
参考



