Do not use mockito for tests with queryable types

Using mockito is fine as long as one does not try to create
a huge amount of data. In this case it might happen, that
mockito needs a lot of memory (probably to track single
calls to methods) and in doing so might spoil load tests
and such.
This commit is contained in:
Rene Pfeuffer
2025-05-08 13:34:17 +02:00
parent 406421c8e5
commit c8d3e00f16
3 changed files with 26 additions and 19 deletions

View File

@@ -33,6 +33,11 @@ public class QueryableTypeDescriptor extends NamedClassElement {
@XmlJavaTypeAdapter(XmlArrayStringAdapter.class)
private String[] types;
QueryableTypeDescriptor(String name, String clazz, String[] types) {
super(name, clazz);
this.types = types;
}
public String[] getTypes() {
return types == null ? new String[0] : types;
}

View File

@@ -18,19 +18,22 @@ package sonia.scm.store.sqlite;
import sonia.scm.plugin.QueryableTypeDescriptor;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import java.lang.reflect.Constructor;
public class QueryableTypeDescriptorTestData {
static QueryableTypeDescriptor createDescriptor(String[] t) {
return createDescriptor("com.cloudogu.space.to.be.Spaceship", t);
public static QueryableTypeDescriptor createDescriptor(String clazz, String[] t) {
return createDescriptor("", clazz, t);
}
static QueryableTypeDescriptor createDescriptor(String clazz, String[] t) {
QueryableTypeDescriptor descriptor = mock(QueryableTypeDescriptor.class);
lenient().when(descriptor.getTypes()).thenReturn(t);
lenient().when(descriptor.getClazz()).thenReturn(clazz);
lenient().when(descriptor.getName()).thenReturn("");
return descriptor;
public static QueryableTypeDescriptor createDescriptor(String name, String clazz, String[] t) {
try {
Constructor<QueryableTypeDescriptor> constructor = QueryableTypeDescriptor.class
.getDeclaredConstructor(String.class, String.class, String[].class);
constructor.setAccessible(true);
return constructor.newInstance(name, clazz, t);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -46,7 +46,7 @@ class TableCreatorTest {
@Test
void shouldCreateTableWithoutParents() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[0]);
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[0]);
tableCreator.initializeTable(descriptor);
@@ -57,8 +57,7 @@ class TableCreatorTest {
@Test
void shouldCreateNamedTableWithoutParents() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[0]);
when(descriptor.getName()).thenReturn("ships");
QueryableTypeDescriptor descriptor = createDescriptor("ships", "com.cloudogu.space.to.be.Spaceship", new String[0]);
tableCreator.initializeTable(descriptor);
@@ -69,7 +68,7 @@ class TableCreatorTest {
@Test
void shouldCreateTableWithSingleParent() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[]{"sonia.scm.repo.Repository.class"});
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[]{"sonia.scm.repo.Repository.class"});
tableCreator.initializeTable(descriptor);
@@ -81,7 +80,7 @@ class TableCreatorTest {
@Test
void shouldCreateTableWithMultipleParents() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[]{"sonia.scm.repo.Repository.class", "sonia.scm.user.User"});
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[]{"sonia.scm.repo.Repository.class", "sonia.scm.user.User"});
tableCreator.initializeTable(descriptor);
@@ -94,7 +93,7 @@ class TableCreatorTest {
@Test
void shouldFailIfTableExistsWithoutIdColumn() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[0]);
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[0]);
try {
connection.createStatement().execute("CREATE TABLE com_cloudogu_space_to_be_Spaceship_STORE (payload JSONB)");
tableCreator.initializeTable(descriptor);
@@ -106,7 +105,7 @@ class TableCreatorTest {
@Test
void shouldFailIfTableExistsWithoutPayloadColumn() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[0]);
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[0]);
try {
connection.createStatement().execute("CREATE TABLE com_cloudogu_space_to_be_Spaceship_STORE (ID TEXT)");
tableCreator.initializeTable(descriptor);
@@ -118,7 +117,7 @@ class TableCreatorTest {
@Test
void shouldFailIfTableExistsWithoutParentColumn() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[]{"sonia.scm.repo.Repository.class"});
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[]{"sonia.scm.repo.Repository.class"});
try {
connection.createStatement().execute("CREATE TABLE com_cloudogu_space_to_be_Spaceship_STORE (ID TEXT, payload JSONB)");
tableCreator.initializeTable(descriptor);
@@ -130,7 +129,7 @@ class TableCreatorTest {
@Test
void shouldFailIfTableExistsWithTooManyParentColumns() throws SQLException {
QueryableTypeDescriptor descriptor = createDescriptor(new String[]{"sonia.scm.repo.Repository.class"});
QueryableTypeDescriptor descriptor = createDescriptor("com.cloudogu.space.to.be.Spaceship", new String[]{"sonia.scm.repo.Repository.class"});
try {
connection.createStatement().execute("CREATE TABLE com_cloudogu_space_to_be_Spaceship_STORE (ID TEXT, Repository_ID, User_ID, payload JSONB)");
tableCreator.initializeTable(descriptor);