Junit Nullpointer


#1

Hallo zusammen,

kann mir jemand erklären warum ich eine NPE bekomme? Wenn ich die Ausgabe über die View teste geht es.

Customerserver verbindet sich über JPA und holt eine Entity by name, welche im Parameter der Methode angegeben wird.

Die Testklasse lautet

public class CustomerTest {
	@EJB
	CustomerService cs;
	@Test
	public void testGetCustomerByName() {
		String loginName = "admin";
		Assert.assertEquals(loginName, cs.getCustomerByName(loginName));  //hier wird NPE geworfen
	}
}

#2

Dein

@EJB
CustomerService cs;

wird nicht injectet, weil vermutlich der Test nicht weiß, dass er sich überhaupt in einem EJB Container befindet.

Du musst sicherstellen, dass dein JUnit test den vollständigen EJB Container läd.


#3

Hi, dachte ich mir. Geht aber auch nicht mit new :thinking:
Wie kann ich das dem Test mitteilen, dass er im Container laufen soll


#4

Wenn das ein reiner Unit-Test sein soll (und kein Integration-test), dann brauchst dafür keinen Container. Dein Test könnte dann z.B. so ausschauen:

public class GreeterApplicationTests {

	private GreetService greetService;
	
	@Before
	public void setUp() throws Exception {
		greetService = new GreetServiceImpl(new GreeterImpl(), null);
	}
	
	@Test
	public void contextLoads() {
		assertThat(greetService.createGreet("Karl")).isEqualTo("Hello, Karl");
	}

}

Ist zwar nicht 1:1 was du hast, aber lässt sich einfach auf deinen Fall anwenden (Test-setup ist gleich): du hast eine setup-Method (annotiert mit @Before) und dort bereitest du deinen Test vor. Wenn dein EJB komplexe Abhängigkeiten hat, dann musst du die ggf. noch mocken.