diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaRunnerTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaRunnerTest.java
index 19a0bf427e082d4d4d23430ac6c394e3ee37ee39..e5d2d31ced5d493b08af6bfc464ec987f573ae7b 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaRunnerTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaRunnerTest.java
@@ -30,9 +30,6 @@ import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
-import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.semantik.SemantikAdapter;
-
 class XtaRunnerTest {
 
 	@InjectMocks
@@ -40,8 +37,6 @@ class XtaRunnerTest {
 
 	@Mock
 	private XtaService service;
-	@Mock
-	private SemantikAdapter semantikAdapter;
 
 	@Nested
 	class TestRunGetXtaMessages {
diff --git a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
index 929fe6fd545477f77bf1ca03f2876deb27ebf24b..77119be77589e48e523bbb22a47800abf6280817 100644
--- a/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
+++ b/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
@@ -51,6 +51,7 @@ import de.ozgcloud.eingang.common.formdata.FormDataControlTestFactory;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
 import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
 import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
+import de.ozgcloud.eingang.semantik.SemantikAdapter;
 import de.ozgcloud.eingang.xdomea.XdomeaMessageDataMapper;
 import de.ozgcloud.xta.client.XtaClient;
 import de.ozgcloud.xta.client.model.XtaMessage;
@@ -69,6 +70,8 @@ class XtaServiceTest {
 	private XtaMessageMapper mapper;
 	@Mock
 	private VorgangNummerSupplier vorgangNummerSupplier;
+	@Mock
+	private SemantikAdapter semantikAdapter;
 
 	@Mock
 	private XtaIncomingFilesMapper incomingFilesMapper;
@@ -79,13 +82,8 @@ class XtaServiceTest {
 	@Mock
 	private FormData formData;
 
-	@Mock
-	private FormData formData2;
-
-	// TODO write missing tests
-
 	@Nested
-	class TestGetMessagesAsFormData {
+	class TestFetchMessages {
 
 		private final XtaTransportReport transportReport = XtaTransportReportFactory.create();
 
@@ -131,6 +129,38 @@ class XtaServiceTest {
 
 	}
 
+	@DisplayName("process message")
+	@Nested
+	class TestProcessMessage {
+		private final XtaMessage xtaMessage = XtaMessageTestFactory.create();
+
+		@DisplayName("should call getFormDataIfNoRuntimeException")
+		@Test
+		void shouldCallGetFormDataIfNoRuntimeException() {
+			service.processMessage(xtaMessage);
+
+			verify(service).getFormDataIfNoRuntimeException(any());
+		}
+
+		@Test
+		void shouldCallProcessSemantik() {
+			doReturn(Optional.of(formData)).when(service).getFormDataIfNoRuntimeException(any());
+
+			service.processMessage(xtaMessage);
+
+			verify(service).processSemantik(formData);
+		}
+
+		@Test
+		void shouldNotCallProcessSemantik() {
+			doReturn(Optional.empty()).when(service).getFormDataIfNoRuntimeException(any());
+
+			service.processMessage(xtaMessage);
+
+			verify(service, never()).processSemantik(any());
+		}
+	}
+
 	@DisplayName("get form data if no runtime exception")
 	@Nested
 	class TestGetFormDataIfNoRuntimeException {
@@ -179,16 +209,14 @@ class XtaServiceTest {
 		}
 	}
 
+	@DisplayName("get form data")
 	@Nested
 	class TestGetFormData {
 
-		@Mock
-		private FormData formData;
-
-		private XtaMessage message = XtaMessageTestFactory.create();
-		private XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
+		private final XtaMessage message = XtaMessageTestFactory.create();
+		private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
+		private final FormData mappedFormData = FormDataTestFactory.create();
 		private RepresentationsAttachmentsPair classification;
-		private FormData mappedFormData = FormDataTestFactory.create();
 
 		@Captor
 		private ArgumentCaptor<XtaMessageMetaData> messageMetaDataCaptor;
@@ -242,6 +270,7 @@ class XtaServiceTest {
 		}
 	}
 
+	@DisplayName("add attachments")
 	@Nested
 	class TestAddAttachments {
 
@@ -267,7 +296,6 @@ class XtaServiceTest {
 	@DisplayName("get representations attachments pair")
 	@Nested
 	class TestGetRepresentationsAttachmentsPair {
-		// TODO use TestFactory instead of Mock
 		@Mock
 		private XtaMessageMetaData messageMetaData;
 
@@ -343,6 +371,7 @@ class XtaServiceTest {
 		}
 	}
 
+	@DisplayName("add representations")
 	@Nested
 	class TestAddRepresentations {
 		@Test
@@ -355,16 +384,27 @@ class XtaServiceTest {
 
 		@Test
 		void shouldRespectExistingRepresentation() {
-			var formData = FormDataTestFactory.createBuilder().control(FormDataControlTestFactory.createBuilder()
+			var formDataWithRepresentation = FormDataTestFactory.createBuilder().control(FormDataControlTestFactory.createBuilder()
 					.representations(Optional.of(
 							Representations.builder().primaryFormDataPdfRepresentation("PDF_FILE").build()))
 					.build()).build();
 
-			var result = service.addRepresentations(formData, XtaMessageTestFactory.PRIMARY_FORM_DATA_MESSAGE);
+			var result = service.addRepresentations(formDataWithRepresentation, XtaMessageTestFactory.PRIMARY_FORM_DATA_MESSAGE);
 
 			var baseAssert = assertThat(result.getControl().getRepresentations()).isPresent().get();
 			baseAssert.extracting(Representations::getPrimaryFormDataRepresentation).isEqualTo(XtaMessageTestFactory.PRIMARY_FORM_DATA_MESSAGE);
 			baseAssert.extracting(Representations::getPrimaryFormDataPdfRepresentation).isEqualTo("PDF_FILE");
 		}
 	}
+
+	@DisplayName("process semantik")
+	@Nested
+	class TestProcessSemantik {
+		@Test
+		void shouldCallSemantikAdapter() {
+			service.processSemantik(FormDataTestFactory.create());
+
+			verify(semantikAdapter).processFormData(any());
+		}
+	}
 }