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?
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht wollen, deklarieren Sie Ihre
StudentRepository
in einer der XML-Dateien verwiesen wird, die von@ContextConfiguration
und autowire in den test, können Sie versuchen, zu verwendenAutowireCapableBeanFactory
wie folgt:Ja, meine Lösung geht davon aus, dass
MailService
undPasswordEncoder
deklariert sind, in configs verweist@ContextConfiguration
und Sie testen möchten, gegen Sie. Wenn Sie brauchen, mocks verwenden Sie stattdessen verhöhnt.Einen gewissen Erfolg, aber immer noch einige Probleme. Ich habe aktualisiert mein Erster post.
Stellte sich heraus, ich war mit JUnit3-Stil-tests, die in die testsuit, die nicht erkennen, die Anmerkungen in den test-Klassen.
InformationsquelleAutor axtavt