An NPE occurred during the tests because the test objects were not correctly constructed (the return value from dao.save should be used instead of the argument).

This commit is contained in:
Tom Vahlman 2012-02-11 13:40:12 +01:00
parent 1a7f831858
commit 018f721045
2 changed files with 179 additions and 37 deletions

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-autowire="byName">
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="testPersistenceUnit" />
<meta key="class" value="se.su.dsv.scipro.match.dataobject.KeyWordable"/>
</bean>
<!--
enable the configuration of transactional behavior based on
annotations
-->
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="projectScheduleDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="userDao" class="se.su.dsv.scipro.data.dao.jpa.UserDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="userNameDao" class="se.su.dsv.scipro.data.dao.jpa.UserNameDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="projectScheduleEventDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleEventDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="scheduleTemplateDao" class="se.su.dsv.scipro.data.dao.jpa.ScheduleTemplateDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="checklistTemplateDao" class="se.su.dsv.scipro.data.dao.jpa.CheckListTemplateDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="projectDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="roleDao" class="se.su.dsv.scipro.data.dao.jpa.RoleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="projectClassDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectClassDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="CheckListDao" class="se.su.dsv.scipro.data.dao.jpa.CheckListDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="FileDescriptionDao" class="se.su.dsv.scipro.data.dao.jpa.FileDescriptionDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="FileRepository" class="se.su.dsv.scipro.repository.FileRepositoryImpl">
</bean>
<bean id="projectScheduleFacade" class="se.su.dsv.scipro.activityplan.facade.ProjectScheduleFacade">
</bean>
<bean id="projectIdeaDao" class="se.su.dsv.scipro.match.dao.jpa.ProjectIdeaDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="applicationPeriodDao" class="se.su.dsv.scipro.match.dao.jpa.ApplicationPeriodDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="matchDao" class="se.su.dsv.scipro.match.dao.jpa.MatchDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="authorDao" class="se.su.dsv.scipro.match.dao.jpa.AuthorDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="supervisorDao" class="se.su.dsv.scipro.match.dao.jpa.SupervisorDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="keywordDao" class="se.su.dsv.scipro.match.dao.jpa.KeywordDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="keywordTypeDao" class="se.su.dsv.scipro.match.dao.jpa.KeywordTypeDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="languageDao" class="se.su.dsv.scipro.data.dao.jpa.LanguageDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="checkListQuestionDao" class="se.su.dsv.scipro.data.dao.jpa.CheckListQuestionDaoJPAImp">
</bean>
<bean id="matchingStrategy" class="se.su.dsv.scipro.match.MatchAllDummyMatchingAlgorithm">
</bean>
</beans>

@ -7,46 +7,58 @@ import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.LanguageDao;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.data.dataobjects.Language;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.match.Matcher.Result;
import se.su.dsv.scipro.match.dao.interfaces.MatchDao;
import se.su.dsv.scipro.match.dao.interfaces.ProjectIdeaDao;
import se.su.dsv.scipro.match.dataobject.Availability;
import se.su.dsv.scipro.match.dataobject.Match.Status;
import se.su.dsv.scipro.match.dataobject.ProjectIdea;
import se.su.dsv.scipro.match.facade.MatchFacade;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestGreedyMatchingAlgorithm {
@Autowired
MatchFacade matchFacade;
@Autowired
MatchDao matchDao;
List<ProjectIdea> unmatchedProjectIdeas;
List<Availability> supervisorAvailability;
Weights weights;
ProjectIdea bachelorProjectIdea;
ProjectIdea masterProjectIdea;
Employee bachelorSupervisor;
Employee masterSupervisor;
ProjectClass bachelorProjectClass;
ProjectClass masterProjectClass;
Set<Language> languages;
@Autowired
private ProjectIdeaDao projectIdeaDao;
@Autowired
private ProjectClassDao projectClassDao;
@Autowired
private LanguageDao languageDao;
private List<ProjectIdea> unmatchedProjectIdeas;
private List<Availability> supervisorAvailability;
private Weights weights;
private ProjectIdea bachelorProjectIdea;
private ProjectIdea masterProjectIdea;
private Employee bachelorSupervisor;
private Employee masterSupervisor;
private ProjectClass bachelorProjectClass;
private ProjectClass masterProjectClass;
private Set<Language> languages;
@Before
public void init() {
public void startTransaction() throws Exception {
unmatchedProjectIdeas = new ArrayList<ProjectIdea>();
supervisorAvailability = new ArrayList<Availability>();
languages = new HashSet<Language>();
Language language = new Language();
language.setName("Swedish");
language = languageDao.save(language);
languages.add(language);
bachelorSupervisor = new Employee();
@ -56,25 +68,33 @@ public class TestGreedyMatchingAlgorithm {
masterSupervisor.getCapabilities().setLanguages(languages);
bachelorProjectClass = new ProjectClass(ProjectClass.BACHELOR, "Bachelor", "Bachelor project class");
masterProjectClass = new ProjectClass(ProjectClass.MASTER, "Master", "Master project class");
bachelorProjectIdea = new ProjectIdea();
bachelorProjectIdea.setProjectClass(bachelorProjectClass);
bachelorProjectIdea.setLanguages(languages);
masterProjectIdea = new ProjectIdea();
bachelorProjectClass = projectClassDao.save(bachelorProjectClass);
masterProjectClass = new ProjectClass(ProjectClass.MASTER, "Master", "Master project class");
masterProjectClass = projectClassDao.save(masterProjectClass);
bachelorProjectIdea = new ProjectIdea();
bachelorProjectIdea.setProjectClass(bachelorProjectClass);
bachelorProjectIdea.setLanguages(languages);
bachelorProjectIdea = projectIdeaDao.save(bachelorProjectIdea);
masterProjectIdea = new ProjectIdea();
masterProjectIdea.setProjectClass(masterProjectClass);
masterProjectIdea.setLanguages(languages);
weights = new Weights();
masterProjectIdea = projectIdeaDao.save(masterProjectIdea);
weights = new Weights();
weights.setKeywordPoints(3);
weights.setResearchAreaPoints(5);
weights.setPreferredSupervisorPoints(10);
}
@Test
@Test
@Transactional
@Rollback
public void testMatchMasterThesisAndMasterSupervisor() {
Availability availability = new Availability(masterSupervisor, 0L, 1, masterProjectClass);
supervisorAvailability.add(availability);
unmatchedProjectIdeas.add(masterProjectIdea);
@ -82,12 +102,15 @@ public class TestGreedyMatchingAlgorithm {
Result result = matchAlgorithm.match(supervisorAvailability, unmatchedProjectIdeas, weights);
Assert.isTrue(result.matches.get(0).getProjectIdea() == masterProjectIdea);
Assert.isTrue(result.matches.get(0).getSupervisor() == masterSupervisor);
Assert.isTrue(result.matches.get(0).getProjectIdea().equals(masterProjectIdea));
Assert.isTrue(result.matches.get(0).getSupervisor() == masterSupervisor);
Assert.notEmpty(result.matches);
Assert.isTrue(result.unmatched.size() == 0);
}
@Test
@Transactional
@Rollback
public void testMatchBachelorThesisAndMasterSupervisor() {
Availability availability = new Availability(masterSupervisor, 0L, 1, masterProjectClass);
supervisorAvailability.add(availability);
@ -97,12 +120,14 @@ public class TestGreedyMatchingAlgorithm {
Result result = matchAlgorithm.match(supervisorAvailability, unmatchedProjectIdeas, weights);
Assert.isTrue(result.matches.get(0).getProjectIdea() == bachelorProjectIdea);
Assert.isTrue(result.matches.get(0).getSupervisor() == masterSupervisor);
Assert.notEmpty(result.matches);
Assert.isTrue(result.matches.get(0).getSupervisor() == masterSupervisor);
Assert.notEmpty(result.matches);
Assert.isTrue(result.unmatched.size() == 0);
}
@Test
@Transactional
@Rollback
public void testMatchBachelorThesisAndBachelorSupervisor() {
Availability availability = new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass);
supervisorAvailability.add(availability);
@ -118,6 +143,8 @@ public class TestGreedyMatchingAlgorithm {
}
@Test
@Transactional
@Rollback
public void testMatchMasterThesisAndBachelorSupervisor() {
Availability availability = new Availability(bachelorSupervisor, 0L, 1, bachelorProjectClass);
supervisorAvailability.add(availability);
@ -131,6 +158,8 @@ public class TestGreedyMatchingAlgorithm {
}
@Test
@Transactional
@Rollback
public void testMatchRightSupervisor() {
Employee bachelorSupervisor2 = new Employee();
bachelorSupervisor2.getCapabilities().setLanguages(languages);