JUnit-test cases für die Frühjahr-Service-Layer
Ich versuche zu konfigurieren, JUnit und schreiben von Testfällen für die Service-Schicht von Frühjahr 3.2 MVC-Anwendung. Ich konnte nicht finden viele Informationen zur Konfiguration der JUnit-von Grund auf neu und machen es Arbeit für die Frühjahr-service-layer. hier ist mein problem
Ich weiß wirklich nicht welche version von junit verwendet werden, so dass ich mir einfach die neueste version
Maven-junit-Abhängigkeit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
Mein service Klasse
@Service
public class AuthService implements IAuthService, ApplicationContextAware,
org.springframework.context.ApplicationListener<org.springframework.context.event.ContextRefreshedEvent> {
public Collection<? extends String> addCommandPermissions(Session session, CommandMetadata command) {
Set<String> result = new HashSet<String>();
String commandName = command.getBeanName();
String defaultAdministerPermission = command.getAdministerPermission()
String defaultExecutePermission = command.getExecutePermission()
String overrideAdminPermission = null;
String overrideExecPermission = null;
String finalAdministerPermission = overrideAdminPermission == null ? defaultAdministerPermission
: overrideAdminPermission;
command.setAdministerPermission(finalAdministerPermission);
result.add(finalAdministerPermission);
String finalFxecutePermission = overrideExecPermission == null ? defaultExecutePermission
: overrideExecPermission;
command.setExecutePermission(finalFxecutePermission);
result.add(finalFxecutePermission);
try {
session.saveOrUpdate(command);
session.flush();
} finally {
//TODO - more swallowed exceptions.
}
return result;
}
//some other methods
}
Meine Test-Klasse(verwendet groovy teilweise)
import junit.framework.TestCase;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.test.context.ContextConfiguration;
import com.dc.core.security.service.impl.AuthService
import com.dc.core.behavior.command.model.impl.CommandMetadata;
import org.hibernate.SessionFactory
import org.hibernate.classic.Session
@ContextConfiguration(locations = "file:WebContent/WEB-INF/applicationContext.xml")
public class AuthServiceTest extends TestCase {
@Autowired
private AuthService authService;
@Autowired
private MockHttpSession mockHttpSession;
@Autowired
ApplicationContext appContext
@Autowired
SessionFactory sessionFactory
private Session mockHibernateSession = Mockito.mock(org.hibernate.classic.Session.class);
private CommandMetadata commandMetadata = new CommandMetadata();
public void setUp() {
appContext.getBeanFactory().registerScope("request", new RequestScope())
MockHttpServletRequest request = new MockHttpServletRequest()
ServletRequestAttributes attributes = new ServletRequestAttributes(request)
RequestContextHolder.setRequestAttributes(attributes)
CurrentRequestProperties currentRequestProperties = appContext.getBean("currentRequestProperties")
session = sessionHandler.initiateSession(sessionFactory, currentRequestProperties)
}
public void testAddCommandPermissions() {
commandMetadata.beanName = "TestBean"
commandMetadata.administerPermission = "TestBean.administer"
commandMetadata.executePermission = "TestBean.execute"
Collection<String> results = authorizationService.addCommandPermissions(session, commandMetadata);
assertTrue(results.contains("TestBean.administer"))
}
public void testCanary() {
assertTrue(true);
}
}
Wenn ich mit meinem test-Fall erhalte die folgende Fehlermeldung
java.lang.NullPointerException: Cannot invoke method getBeanFactory() on null object
Ich denke, Ursache des Problems ist appContext ist nicht injiziert richtig damit immer bin NPE. Aber ich konnte das Problem lösen. Ich wirklich zu schätzen jemand helfen auf dieser
@RunWith(SpringJUnit4ClassRunner.class)
auf die getestete Klasse?InformationsquelleAutor RanPaul | 2014-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie die Feder JUnit-Klasse-Läufer. Sie sollte auch die @Test-Annotationen anstelle von TestCase erweitern.
z.B.
InformationsquelleAutor Steven
Dies ist, wie ich Meine ServiceTest Hoffe, dies wird Ihnen helfen,
Möchte nur hinzufügen einige Idee und ich bin nicht sicher, ob es sich bewährt oder nicht, so korrigieren Sie mich, wenn theres etwas falsch.
-src
--hibernate.cfg.xml
-test
--TestPackage
---BaseServiceTest.class
---BlogspotServiceTest.class
-web
--WEB-INF
---blogspot-servlet-test.xml
---jdbc-test.Eigenschaften
in meinem Fall habe ich meine blogspot-servlet-test.xml zu nennen oder zu erstellen, die Datenquelle und die weitere Konfiguration erforderlich.
MEINEM jdbc-test.Eigenschaften Datei
Für hibernate.cfg.xml
und ich BaseClass für mich zu vermindern und die Erstellung von multiple @SpringApplicationContext annotation und es ist auch verwenden, um erstellen Sie gemeinsame Konfiguration erforderlich in Tests von anderen test-Klasse,die Sie gerade benötigen, um die Sie erweitert.
ich verwendet @SpringApplicationContext laden Sie die datasource und andere bean-Konfigurationen auf meine BaseClass aus meiner Feder Konfigurations-und dies ist, wie ich es umsetzen.
Unten : siehe Frühling-Unitils Tutorial
für mehr details
HINWEIS: erstellen Sie bitte unitils.Eigenschaften und unitils-lokalen.Eigenschaften innen TestPackage in der Lage sein, um das Programm auszuführen.
Für @SpringBean Erklärung und andere Anmerkungen bitte Lesen :
Unitils-EasyMock
InformationsquelleAutor Secondo