2017-02-24 8 views
0

私はSpringブートで書かれたRestFul APIのためにJUnitを書いています。JUnitソフト削除のテスト

APIには「ソフト削除」と呼ばれる機能があり、「アクティブ」と呼ばれるデータベース列があります。ユーザーがオブジェクトを削除した場合、アクティブに0が設定され、このオブジェクトが削除されたことが示されます。

ここにソフト削除用のJunitテストコードがあります。驚いたことに、Junitの結果は、オブジェクトを削除してもアクティブが常に1であることを示しています。ここで

enter image description here

削除コードです。ご覧のとおり、「アクティブ」を更新してfalseに設定するだけです。

@RepositoryRestResource(collectionResourceRel = "manufacturers", path = "manufacturers") 
public interface ManufacturerRepository extends CrudRepository<Manufacturer, String> { 

    @Modifying 
    @Query("update Manufacturer m set m.active=false where m.id=: {#m.getManufacturerId()}") 
    void delete(@Param("m") Manufacturer m); 

} 

データベーステーブルでアクティブが0に設定されていることがわかったので、テストコードが間違っていると確信しています。なぜこのようなことが起こっているのか?

アドバイスありがとうございます。私はコードを更新して、データベースから新しいコピーを取得しました。これでアクティブがfalseになり、私のコードがテストに合格しました。

enter image description here

+1

ユニットテストはおそらくdbとやりとりするべきではないでしょう。これはユニットテストではなく、統合テストです – nhouser9

+0

リポジトリの 'delete'メソッドは何ですか?あなたはいくつかのコードを与えることができますか? –

答えて

3

あなたがDBにそれを「削除」した後にメーカーを得ることはありませんように見えます。

repository.delete(製造元)で製造元を更新しない限り、データベースからオブジェクトの更新バージョンを取得するにはゲッターを呼び出す必要があります。

+0

ありがとう、私は古いオブジェクトをテストしていました。 getterを使用して更新版を取得した後、私のテストコードでは、現在アクティブであることが示されています。 –

関連する問題