2017-01-04 8 views
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; 
} 
} 
+0

TestConfiguration.classを表示しますか?私はあなたが春のコンテナによってAuthorCreateServiceImplが取得されるようにスキャンしていないと思われます。 –

+0

問題はおそらく、あなたがモック 'AuthorRepository 'に何かをスタブしていないので、nullを返すことでしょう。クラスがないためにテストケースを実行できないため、これが問題であることを確認するのは難しい – Raniz

答えて

1

あなたは春・コンテキストからBeanを取得したい場合は、この注釈が必要です。 実装では、虚偽のリポジトリを使用してサービスを作成しました。疑似オブジェクトはデフォルトでnullを返します。 Mockito.when()を使用して、デフォルトの動作を上書きすることができます。

関連する問題