Spring JUnit Tests mit @Autowired-annotation

Ich habe Probleme mit meinem test-Fällen, nachdem Sie eingeführt @Autowired in einer der Klassen unter test.

Mein testcase sieht nun wie folgt aus:

@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 sieht nun wie folgt aus:

@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;
}

Offensichtlich ist dieser test Fall wird nicht mehr funktionieren.
Aber welche änderungen muss ich vornehmen müssen, um den Testfall für die @Autowired-annotation abgeholt werden durch die Prüfung Falle?

EDIT:

Ive jetzt aktualisiert mein setUp (), um diese (ich brauche den Passwort-encoder zu vermeiden, ein null-Kennwort):

@Before
public void setUp() {
    //studentRepository = new StudentRepository();
    studentRepository = new StudentRepository(mock(MailService.class), ctx.getAutowireCapableBeanFactory().createBean(ShaPasswordEncoder.class));
    studentRepository.setJdbcTemplate(getJdbcTemplate());
    testStudent = Utils.testStudentNoApplication();
}

Mein testcase läuft jetzt OK, aber meine testsuite fehlschlägt, mit einer NullPointerException.
Ich vermute die Datei ApplicationContext ist nicht Autowired bei der Ausführung der testsuite aus irgendeinem Grund?

Ist das nur ein problem in der Prüfung? Tut der Frühling nicht in irgendeiner Weise mit eine Ausnahme?
Wenn es eine unit-test, sollten Sie wahrscheinlich pass mock MailService und PasswordEncoder Instanzen an den Konstruktor des StudentRepository. Check-out Mockito, EasyMock oder andere Spott-API.

InformationsquelleAutor Daniel | 2011-12-13

Schreibe einen Kommentar