diff --git a/tests/src/com/android/vcard/tests/exception/VCardAgentNotSupportedExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardAgentNotSupportedExceptionTest.java
new file mode 100644
index 0000000..c370ec0
--- /dev/null
+++ b/tests/src/com/android/vcard/tests/exception/VCardAgentNotSupportedExceptionTest.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.vcard.tests;
+
+import com.android.vcard.exception.VCardAgentNotSupportedException;
+
+import junit.framework.TestCase;
+
+public class VCardAgentNotSupportedExceptionTest extends TestCase {
+    static final String TEST_MESSAGE = "message";
+
+    public void testExceptionWithoutMessage() {
+        VCardAgentNotSupportedException exception = new VCardAgentNotSupportedException();
+        assertNull(exception.getMessage());
+    }
+
+    public void testExceptionWithMessage() {
+        VCardAgentNotSupportedException exception = new VCardAgentNotSupportedException(
+                TEST_MESSAGE);
+        assertEquals(exception.getMessage(), TEST_MESSAGE);
+    }
+}
diff --git a/tests/src/com/android/vcard/tests/VCardExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardExceptionTest.java
similarity index 100%
rename from tests/src/com/android/vcard/tests/VCardExceptionTest.java
rename to tests/src/com/android/vcard/tests/exception/VCardExceptionTest.java
diff --git a/tests/src/com/android/vcard/tests/exception/VCardInvalidCommentLineExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardInvalidCommentLineExceptionTest.java
new file mode 100644
index 0000000..5a1429f
--- /dev/null
+++ b/tests/src/com/android/vcard/tests/exception/VCardInvalidCommentLineExceptionTest.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.vcard.tests;
+
+import com.android.vcard.exception.VCardInvalidCommentLineException;
+
+import junit.framework.TestCase;
+
+public class VCardInvalidCommentLineExceptionTest extends TestCase {
+    static final String TEST_MESSAGE = "message";
+
+    public void testExceptionWithoutMessage() {
+        VCardInvalidCommentLineException exception = new VCardInvalidCommentLineException();
+        assertNull(exception.getMessage());
+    }
+
+    public void testExceptionWithMessage() {
+        VCardInvalidCommentLineException exception = new VCardInvalidCommentLineException(
+                TEST_MESSAGE);
+        assertEquals(exception.getMessage(), TEST_MESSAGE);
+    }
+}
diff --git a/tests/src/com/android/vcard/tests/exception/VCardInvalidLineExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardInvalidLineExceptionTest.java
new file mode 100644
index 0000000..6568de8
--- /dev/null
+++ b/tests/src/com/android/vcard/tests/exception/VCardInvalidLineExceptionTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.vcard.tests;
+
+import com.android.vcard.exception.VCardInvalidLineException;
+
+import junit.framework.TestCase;
+
+public class VCardInvalidLineExceptionTest extends TestCase {
+    static final String TEST_MESSAGE = "message";
+
+    public void testExceptionWithoutMessage() {
+        VCardInvalidLineException exception = new VCardInvalidLineException();
+        assertNull(exception.getMessage());
+    }
+
+    public void testExceptionWithMessage() {
+        VCardInvalidLineException exception = new VCardInvalidLineException(TEST_MESSAGE);
+        assertEquals(exception.getMessage(), TEST_MESSAGE);
+    }
+}
diff --git a/tests/src/com/android/vcard/tests/exception/VCardNestedExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardNestedExceptionTest.java
new file mode 100644
index 0000000..ee87dc2
--- /dev/null
+++ b/tests/src/com/android/vcard/tests/exception/VCardNestedExceptionTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.vcard.tests;
+
+import com.android.vcard.exception.VCardNestedException;
+
+import junit.framework.TestCase;
+
+public class VCardNestedExceptionTest extends TestCase {
+    static final String TEST_MESSAGE = "message";
+
+    public void testExceptionWithoutMessage() {
+        VCardNestedException exception = new VCardNestedException();
+        assertNull(exception.getMessage());
+    }
+
+    public void testExceptionWithMessage() {
+        VCardNestedException exception = new VCardNestedException(TEST_MESSAGE);
+        assertEquals(exception.getMessage(), TEST_MESSAGE);
+    }
+}
diff --git a/tests/src/com/android/vcard/tests/exception/VCardNotSupportedExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardNotSupportedExceptionTest.java
new file mode 100644
index 0000000..0d393be
--- /dev/null
+++ b/tests/src/com/android/vcard/tests/exception/VCardNotSupportedExceptionTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.vcard.tests;
+
+import com.android.vcard.exception.VCardNotSupportedException;
+
+import junit.framework.TestCase;
+
+public class VCardNotSupportedExceptionTest extends TestCase {
+    static final String TEST_MESSAGE = "message";
+
+    public void testExceptionWithoutMessage() {
+        VCardNotSupportedException exception = new VCardNotSupportedException();
+        assertNull(exception.getMessage());
+    }
+
+    public void testExceptionWithMessage() {
+        VCardNotSupportedException exception = new VCardNotSupportedException(TEST_MESSAGE);
+        assertEquals(exception.getMessage(), TEST_MESSAGE);
+    }
+}
diff --git a/tests/src/com/android/vcard/tests/exception/VCardVersionExceptionTest.java b/tests/src/com/android/vcard/tests/exception/VCardVersionExceptionTest.java
new file mode 100644
index 0000000..1e9ed67
--- /dev/null
+++ b/tests/src/com/android/vcard/tests/exception/VCardVersionExceptionTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.vcard.tests;
+
+import com.android.vcard.exception.VCardVersionException;
+
+import junit.framework.TestCase;
+
+public class VCardVersionExceptionTest extends TestCase {
+    static final String TEST_MESSAGE = "message";
+
+    public void testExceptionWithoutMessage() {
+        VCardVersionException exception = new VCardVersionException();
+        assertNull(exception.getMessage());
+    }
+
+    public void testExceptionWithMessage() {
+        VCardVersionException exception = new VCardVersionException(TEST_MESSAGE);
+        assertEquals(exception.getMessage(), TEST_MESSAGE);
+    }
+}
