在測試中的其中一個類中引入@Autowired後,我的測試用例出現問題。使用@Autowired註解進行Spring JUnit測試
我的測試用例現在看起來是這樣的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml", "/spring-security.xml"})
public class StudentRepositoryTest extends AbstractDatabaseTestCase {
private StudentRepository studentRepository;
private CompanyRepository companyRepository;
private Student testStudent;
private Company testCompany;
@Before
public void setUp() {
studentRepository = new StudentRepository();
studentRepository.setJdbcTemplate(getJdbcTemplate());
testStudent = Utils.testStudentNoApplication();
}
@Test
....
}
StudentRepository現在看起來是這樣的:
@Service
public class StudentRepository extends AbstractRepository<Student> {
...
private PasswordEncoder passwordEncoder;
private MailService mailService;
public StudentRepository() {
// TODO Auto-generated constructor stub
}
@Autowired
public StudentRepository(MailService mailService, PasswordEncoder passwordEncoder) {
this.mailService = mailService;
this.passwordEncoder = passwordEncoder;
}
顯然,這測試用例不需額外的工作了。 但是我需要對測試用例的@Autowired註釋的測試用例進行哪些更改?
編輯:
從來就目前更新我的設置()這個(我需要的密碼編碼器,以避免空口令):
@Before
public void setUp() {
//studentRepository = new StudentRepository();
studentRepository = new StudentRepository(mock(MailService.class), ctx.getAutowireCapableBeanFactory().createBean(ShaPasswordEncoder.class));
studentRepository.setJdbcTemplate(getJdbcTemplate());
testStudent = Utils.testStudentNoApplication();
}
我的測試用例現在運行正常,但我的測試套件用NullPointerException失敗。 我猜測由於某種原因運行測試套件時ApplicationContext未被自動裝配?
這是隻在一個問題考試? Spring會以某種方式出現異常嗎? – hellectronic
如果它是一個單元測試,你可能應該將模擬MailService和PasswordEncoder實例傳遞給你的StudentRepository的構造函數。查看Mockito,EasyMock或任何其他模擬API。 –