BAEL-5846 - Testing methods that call System.exit (#12952)
* BAEL-5846 - Testing methods that call System.exit * BAEL-5846 - Testing methods that call System.exit - JMockit implementation * BAEL-5846 - Testing methods that call System.exit - Changing test case names * BAEL-5846 - Testing methods that call System.exit - changing test names * BAEL-5777 - Mocking a singleton with Mockito - review incorporation
This commit is contained in:
parent
fffc0bc704
commit
aeac3c1d3c
|
@ -14,4 +14,36 @@
|
|||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.github.stefanbirkner</groupId>
|
||||
<artifactId>system-lambda</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jmockit</groupId>
|
||||
<artifactId>jmockit</artifactId>
|
||||
<version>${jmockit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<argLine>
|
||||
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
|
||||
</argLine>
|
||||
<disableXmlReport>true</disableXmlReport>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<jmockit.version>1.49</jmockit.version>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,17 @@
|
|||
package com.baeldung.systemexit;
|
||||
|
||||
public class Task {
|
||||
private String name;
|
||||
|
||||
public Task(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package com.baeldung.systemexit;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class TaskDAO {
|
||||
public void save(Task task) throws Exception {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.baeldung.systemexit;
|
||||
|
||||
public class TaskService {
|
||||
|
||||
private final TaskDAO taskDAO;
|
||||
|
||||
public TaskService(TaskDAO taskDAO) {
|
||||
this.taskDAO = taskDAO;
|
||||
}
|
||||
|
||||
public void saveTask(Task task) {
|
||||
try {
|
||||
taskDAO.save(task);
|
||||
} catch (Exception e) {
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package com.baeldung.systemexit;
|
||||
|
||||
import mockit.Mock;
|
||||
import mockit.MockUp;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
public class TaskServiceJMockitUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenDAOThrowsException_whenSaveTaskIsCalled_thenSystemExitIsCalled() throws Exception {
|
||||
|
||||
new MockUp<System>() {
|
||||
@Mock
|
||||
public void exit(int value) {
|
||||
throw new RuntimeException(String.valueOf(value));
|
||||
}
|
||||
};
|
||||
|
||||
Task task = new Task("test");
|
||||
TaskDAO taskDAO = mock(TaskDAO.class);
|
||||
TaskService service = new TaskService(taskDAO);
|
||||
try {
|
||||
doThrow(new NullPointerException()).when(taskDAO).save(task);
|
||||
service.saveTask(task);
|
||||
} catch (RuntimeException runtimeException) {
|
||||
Assertions.assertEquals("1", runtimeException.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.baeldung.systemexit;
|
||||
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.security.Permission;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class TaskServiceSecurityManagerUnitTest {
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
System.setSecurityManager(new NoExitSecurityManager());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenDAOThrowsException_whenSaveTaskIsCalled_thenSystemExitIsCalled() throws Exception {
|
||||
Task task = new Task("test");
|
||||
TaskDAO taskDAO = mock(TaskDAO.class);
|
||||
TaskService service = new TaskService(taskDAO);
|
||||
try {
|
||||
doThrow(new NullPointerException()).when(taskDAO).save(task);
|
||||
service.saveTask(task);
|
||||
} catch (RuntimeException e) {
|
||||
Assertions.assertEquals("1", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static class NoExitSecurityManager extends SecurityManager {
|
||||
@Override
|
||||
public void checkPermission(Permission perm) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkExit(int status) {
|
||||
super.checkExit(status);
|
||||
throw new RuntimeException(String.valueOf(status));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.baeldung.systemexit;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.Test;
|
||||
|
||||
import static com.github.stefanbirkner.systemlambda.SystemLambda.catchSystemExit;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
public class TaskServiceSystemLambdaUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenDAOThrowsException_whenSaveTaskIsCalled_thenSystemExitIsCalled() throws Exception {
|
||||
int statusCode = catchSystemExit(() -> {
|
||||
Task task = new Task("test");
|
||||
TaskDAO taskDAO = mock(TaskDAO.class);
|
||||
TaskService service = new TaskService(taskDAO);
|
||||
doThrow(new NullPointerException()).when(taskDAO).save(task);
|
||||
service.saveTask(task);
|
||||
});
|
||||
Assertions.assertEquals(1, statusCode);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue