I want to inject DeMorgenArticleScraper in a test.
@RunWith(SpringJUnit4ClassRunner.class)
public class DeMorgenArticleScraperTest {
@Autowired
priv
I have the same problem.
There is service, which I want to inject for testing but I want to test only platformToSql(..)
method without launching whole Spring Boot application.
@Service
public class ConverterToSqlImpl implements IConverterToSql {
private final ISomeRepository someRepository;
private final IUtilService utilService;
public ConverterToSqlMainConstructorServiceImpl(
IWorkerUtilService workerUtilService,
ISomeRepository someRepository) {
this.utilService = utilService;
this.someRepository = someRepository;
}
@Override
public String platformToSql(String platformName) {
return "platform='" + platformName + "'";
}
@Override
public String methodWhichUseRepositoryAndUtilBeans() {
// some code which is not interested us
}
}
I create test class. It is necessary to mock beans because they are not need for test method.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {ConverterToSqlImpl.class})
//@ContextConfiguration(classes = {ConverterToSqlImpl.class})
@MockBeans({@MockBean(IUtilService.class), @MockBean(ISomeRepository.class)})
public class SqlConverterConstructorTest {
@Autowired
private IConverterToSqlMainConstructorService convertToSql;
@Test
public void platformTest() {
String platformSql = convertToSql.platformToSql("PLATFORM_1");
String expectedSql = "platform='PLATFORM_1'";
Assert.assertEquals(platformSql, expectedSql);
}
}
@SpringBootTest(classess = {})
load to ApplicationContext
only classess which are pointed out in classess
section, not whole application with all beans will be lauched.
Also, as alternative to @SpringBootTest
with classes={..}
, you can uncomment line with @ContextConfiguration
. It is plain old style.