Java 莫基托+;TestNG+;字符串-测试在没有自动连线的情况下不工作
我正在为一个web应用程序编写单元测试,但服务层有问题。应用程序正在使用Spring数据JPA和H2数据库进行测试 这是我的测试课:Java 莫基托+;TestNG+;字符串-测试在没有自动连线的情况下不工作,java,spring,mockito,testng,spring-data-jpa,Java,Spring,Mockito,Testng,Spring Data Jpa,我正在为一个web应用程序编写单元测试,但服务层有问题。应用程序正在使用Spring数据JPA和H2数据库进行测试 这是我的测试课: @WebAppConfiguration @ContextConfiguration(classes = {TestConfiguration.class}) @TestPropertySource(locations = "classpath:test.properties") @Transactional public class AuthorCreateSe
@WebAppConfiguration
@ContextConfiguration(classes = {TestConfiguration.class})
@TestPropertySource(locations = "classpath:test.properties")
@Transactional
public class AuthorCreateServiceTest extends AbstractTestNGSpringContextTests {
@Mock
private AuthorRepository authorRepository;
private AuthorCreateServiceImpl authorCreateServiceImpl;
private Author firstAuthor;
private Author secondAuthor;
@BeforeClass
public void setUp() {
authorCreateServiceImpl = new AuthorCreateServiceImpl(authorRepository);
firstAuthor = new Author();
firstAuthor.setFirstName("Leo");
firstAuthor.setLastName("Manly");
firstAuthor.setNationality("Mexico");
firstAuthor.setId(3L);
secondAuthor = new Author();
secondAuthor.setFirstName("Zorro");
secondAuthor.setLastName("Plata");
secondAuthor.setNationality("Zambia");
secondAuthor.setId(4L);
}
@Test
public void succesfullySaveAuthorTest() {
Author testAuthor = authorCreateServiceImpl.create(firstAuthor);
Assert.assertEquals(testAuthor.getFirstName(), firstAuthor.getFirstName());
}
@Test
public void failSavingAuthorTest() {
String firstName = "Man";
Author testAuthor = authorCreateServiceImpl.create(secondAuthor);
boolean isEqual = testAuthor.getFirstName().equals(firstName);
Assert.assertFalse(isEqual);
}
}
在此状态下,testAuthor
为空,但存储库和createService
对象存在。但是,如果我在autrhorcreateserviceinpl
字段中添加一个Autowired
注释,它可以正常工作
自动连线是必要的还是我做错了什么
编辑
测试配置类
@ComponentScan(basePackages = {"com.altkom.library"} )
@Configuration
@TestPropertySource(locations = "classpath:test.properties")
public class TestConfiguration extends JPAConfiguration {
public TestConfiguration(Environment environment) {
super(environment);
}
@Bean(destroyMethod = "shutdown")
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase dataBase = builder.setType(EmbeddedDatabaseType.H2).addScript("classpath:import.sql").build();
return dataBase;
}
}
如果您想从spring上下文中获取bean,则需要此注释。
在您的实现中,您已经使用模拟存储库创建了一个服务。模拟对象默认返回null。您可以使用Mockito.when()
覆盖默认行为。是否显示TestConfiguration.class,我怀疑您没有扫描,因此AuthorCreateServiceImpl会被spring容器拾取。问题可能是您没有在模拟“AuthorRepository”中存根任何内容,因此它返回null。但是,由于缺少类,我们无法运行您的测试用例,因此很难验证这是否是问题所在