Spring test

Spring test

  • musíme sestavit spring kontext
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {TestConfig.class}, 
    loader = AnnotationConfigContextLoader.class)
@ActiveProfiles("test")
public abstract class AbstractTest {
}
@Configuration
@ComponentScan("com.cleverlance.academia.spring.test")
public class TestConfig {

}

Spring test

  • testované objekty nevytváříme ale injectujeme
public class CustomerRepositoryTest extends AbstractTest {

    @Autowired
    private CustomerRepository customerRepository;

    @Test
    public void findById_shouldReturnCorrectCustomer() {
        customerRepository.fin....
    }
}

Spring test

  • pokud máme knihovnu mockito můžeme využívat i mockování
public class CustomerServiceTest extends AbstractTest {

    @Before
    public void init() {

        MockitoAnnotations.initMocks(this);
    }

    @InjectMocks
    @Autowired
    private CustomerService customerService;

    @Mock
    private CustomerRepository customerRepository;

Spring test

  • přes spring profil můžeme vytvořit beany specifické pro testy (např. připojení do DB)
@Configuration
@ComponentScan("com.cleverlance.academia.spring.test")
public class TestConfig {

    @Bean
    @Profile("test")
    public Database database() {

        return new DatabaseTest();
    }
}
@Configuration
@ComponentScan("com.cleverlance.academia.spring.test")
public class AppConfig {

    @Bean
    @Profile("!test")
    public Database database() {

        return new DatabaseImpl();
    }
}