0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テスト失敗の原因を JetBrains AI Chat で聞いてみた

0
Posted at

はじめに

今回は 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));
}

Run すると、通りません。
image.png

AI Chat に聞く

JetBrains AI Assistant の AI Chatを開き、3点をまとめてチャットに貼りました。

  1. テスト内容
  2. applyDiscount() のメソッド本体
  3. Expected :800 / Actual :0 という失敗内容
    image.png
    するとすぐに回答があり、原因は 整数の割り算(整数除算) でした。
    image.png
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 し直すと、テストが通りました。✅

image.png

渡す情報がすべて

Expected :800 / Actual :0 の1行だけを貼ると、AI は「テスト側が間違っている」と思い込み、assertEquals(0, ...) への書き換えを勧めてきます。

テスト・メソッド本体・失敗内容の3点をそろえて渡す。 ことで正確な回答を得られました。

最終確認はテスト。 AI の回答を実際に Run してテストが通るまで。

まとめ

今回はJetBrains のAI Chatを使ってテスト修正を行いました。

  1. 失敗した1行だけでなく、テスト・対象メソッド・Expected/Actual をまとめて貼る。情報が少ないと、AI は「テスト側が間違っている」と早合点しがちです。
  2. 修正コードだけで満足せず、「なぜ間違ったか」まで聞いて、最後は自分で Run して確かめる。

ナットウシステムからのお知らせ

弊社は JetBrains 製品に関するご質問、ご相談等を受け付けております。弊社のXまたはメールでご連絡ください。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?