2016-04-07 18 views
0

CrudRepository kullanan bir Denetleyici için test yapıyorum. Tipik olarak, birim testini gerçek depo örnekleri yerine sahtekar kullanarak izole etmek isterim. Ancak, Spring gerçek Repository proxy'leri enjekte etmeye devam ediyor ve bunları etkili bir şekilde nasıl hariç tutacağımı bilmiyorum. Ben @NoRepositoryBean ile yapılandırma sınıfı annotating denedim ama işe yaramadıYay testlerinde Depoları nasıl hariç tutarım?

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
class TestConfiguration { 

    @Bean 
    AccountRepository accountRepository() { 
     mock(AccountRepository) 
    } 

} 

: benzeri

Benim birim test bakmak şey: gibi

@SpringApplicationConfiguration(TestConfiguration) 
@WebAppConfiguration 
class ControllerSpec extends Specification { 
    ... 
} 

yapılandırma görünüyor. Ayrıca regex kullanarak excludeFiltersComponentScan kullanmayı denedim, ama aynı zamanda işe yaramadı.

+0

@Mock özel AccountRepository accountRepository için deneme yapmak isteyebilirsiniz; sınıf seviyesinde. – asg

+0

Denetleyici sınıfınızda AccountRepository için setter metodunu eklemiş olursunuz. Testi yürütmeden önce, yalnızca örnek uygulama olarak repo ayarlayın. –

cevap

0

@EnableAutoConfiguration açıklama kullanıcıların bazı otomatik yapılandırma özelliklerini göz ardı sağlayan bir excludes özelliğine sahiptir. Bunların çoğu, karşılık gelen *AutoConfiguration sınıflarıyla temsil edilir. Özellikle baypas depoları için aşağıdaki otomatik konfigürasyon hariç tutulabilir:

  • HibernateJpaAutoConfiguration
  • DataSourceAutoConfiguration
  • JpaRepositoriesAutoConfiguration

Ben onların kombinasyonlarından mutlak olan gerçekten emin değilim minimum, ancak onlarla deneme-yanılma yapmak nispeten kolay olmalıdır.

0

Denetleyicinizin en üstünde @InjectMock ek açıklaması ve deponuz için @ Not notu kullanmanız gerekir.

@RunWith(MockitoJUnitRunner.class) 
public class AccountControllerTest { 

@InjectMocks 
AccountController controller; 

@Mock 
AccountRepository accountRepository; 
} 
+0

Test için JUnit kullanmıyorum (en azından doğrudan değil), böylece koşucular çalışmaz. –

İlgili konular