1
Webアプリケーションの単体テストを書いていますが、サービスレイヤに問題があります。アプリケーションはSpring Data JPAとH2データベースをテスト用に使用しています。 testAuthor
がnullである。この状態でMockito + TestNG +文字列 - テストが自動実行なしで動作しない
@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);
}
}
が、リポジトリとcreateService
オブジェクトが存在します。
は、ここに私のテストクラスです。しかし、Autowired
注釈をAutrhorCreateServiceImpl
フィールドに追加すると正常に動作します。
Autowired
は必要ですか、何か間違っていますか?
EDIT
TestConfigurationクラス
@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;
}
}
TestConfiguration.classを表示しますか?私はあなたが春のコンテナによってAuthorCreateServiceImplが取得されるようにスキャンしていないと思われます。 –
問題はおそらく、あなたがモック 'AuthorRepository 'に何かをスタブしていないので、nullを返すことでしょう。クラスがないためにテストケースを実行できないため、これが問題であることを確認するのは難しい – Raniz