2017-06-20 16 views
1

AccountsRepositoryテスト@Autowired JpaRepository

public interface AccountsRepository extends JpaRepository<Account, Long> {} 

AccountsEndpointTest

class AccountsEndpointTest extends Specification { 
    @Shared @Autowired AccountsRepository accountRepository 
    @Shared def entriesCount 

    def setupSpec() { 
    accountRepository = Mock() 
    } 

    def "create user"() { 
    given: "the current number of rows in accounts table" 
    entriesCount = accountRepository.count() 

    when: "add endpoint is invoked" 
    // send /user/add request 

    expect: 
    entriesCount < accountRepository.count() 

    } 
} 

entriesCountはブロックを期待与えでくれOを与えます。私はこれを手動でテストしました。テーブルにはエントリがあるので、戻り値はゼロではありません。これを正しくspockでテストする方法

答えて

2

スポックモックは、@Sharedと定義されていると機能しませんが、ここで問題はありません。 @ContextConfigurationまたは@SpringBootTest注釈がないため、実際に春が使用され、Beanを挿入できます。また、クラスパスにspock-springの依存関係があることを確認してください。

側の注意点として、あなたはまた、エントリ数が増加しているべきであると言うこと

expect: 
accountRepository.count() == old(accountRepository.count()) + 1 

を使用することができます。

1

問題は、リポジトリとやり取りするのではなく、モックとやりとりすることです。

setupSpecでは、注入されたリポジトリを、countメソッドとやりとりするときにデフォルトで0を返すモックに置き換えます。実際に注入されたリポジトリと対話するには、setupSpecの部分を削除します。

+0

良い説明。しかし、私がsetupSpecブロックでそれを削除しようとすると、accountRepositoryはnullになります –

関連する問題