[エラー]SpringBoot Repository UPDATE文の単体テストが成功しない　原因@Modifyingの引数が不足していため。

# 症状
RepositoryにおけるUPDATE処理の単体テストでエラーが出たので症状と対処法を投稿します。

## プロダクトコード
```CustomerRepository.java
@Repository
public interface CustomerRepository extends CrudRepository<Customer, Integer> {

    @Modifying
    @Query("UPDATE Customer c SET  c.enabled= true  WHERE c.id = ?1")
    public void enabled(Integer id);
}

```


```Customer.java
@Entity
@Table(name = "customers")
@Data
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false)
    private Integer id;

    // Loginするときのパスワードして使う
    @Column(nullable = false, length = 64)
    private String password;

    // ログインするときのIDとして使用する
    @Column(nullable = false, unique = true, length = 45)
    private String email;

    // 認証コード
    @Column(name = "verification_code", length = 64)
    private String verificationCode;

    // 初期値はfalse 認証が成功すると trueになる。
    private boolean enabled;

    public Customer(Integer id, String password, String email, String verificationCode, boolean enabled) {
        this.id = id;
        this.password = password;
        this.email = email;
        this.verificationCode = verificationCode;
        this.enabled = enabled;
    }

    public Customer() {
    }
}


```

## テストコード

```CustomerRepositoryTest.java
@DataJpaTest
public class CustomerRepositoryTest {
    @Autowired
    CustomerRepository customerRepository;
    @Test
    @DisplayName("idを引数とし、enabledを実行したとき、enabledの値がfalseからtrueになる。")
    public void givenCustomerId_when_then() {
        // given-precondition or Setup
        Integer customerId = 1;
        customerRepository.save(new Customer(customerId,"password","testaaa@gmail.com","hogehogeaa",false));
        //when - action or the behavior that we are going test
        customerRepository.enabled(1);
        //then - verify the output
        Optional<Customer> enabledCustomer = customerRepository.findById(customerId);
        assertThat(enabledCustomer.get().isEnabled()).isTrue();

    }


}


```

## テスト結果
NGになります。
UPDATE処理が実行されなく、enabled変数がfalseのままになっています。
本当はfalse→trueと変化させたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/a710cf69-a595-0258-9be9-5e720657188e.png)


# 原因、解決
Repositoryレイヤーのメソッドのアノテーション@Modifyingに引数を加えてなかったから。

## 修正後
```diff_java:CustomerRepository

@Repository
public interface CustomerRepository extends CrudRepository<Customer, Integer> {

+    @Modifying(clearAutomatically = true)
    @Query("UPDATE Customer c SET  c.enabled= true  WHERE c.id = ?1")
    public void enabled(Integer id);
}

```

## テスト結果

成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/84ab1c1a-4f2b-5a71-0b48-aa9949e1e5bb.png)


# 開発環境

OS:windows10
IDE:IntelliJ Community
spring-boot-starter-parent 2.75
java　：　11

# 参考
公式ドキュメント

https://spring.pleiades.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/Modifying.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/74080d2c-105d-02f2-316b-a26aa1776fbf.png)



stackoverflow

https://stackoverflow.com/questions/45617040/datajpatest-fail-to-update-in-unit-test