diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 50612e4d7ffc375199e6ab6d53964f93dd1f0a9d..a07732faf08d501d4680f396ac956d98adf6ab05 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -22,6 +22,7 @@ append_source_files(TEST_SOURCES FileIO)
 append_source_files(TEST_SOURCES GeoLib)
 append_source_files(TEST_SOURCES GeoLib/IO)
 append_source_files(TEST_SOURCES MaterialLib)
+append_source_files(TEST_SOURCES MaterialLib/SolidModels)
 append_source_files(TEST_SOURCES MathLib)
 append_source_files(TEST_SOURCES MeshLib)
 append_source_files(TEST_SOURCES MeshToolsLib)
diff --git a/Tests/MaterialLib/SolidModels/CreateTestConstitutiveRelation.h b/Tests/MaterialLib/SolidModels/CreateTestConstitutiveRelation.h
new file mode 100644
index 0000000000000000000000000000000000000000..f0bae917126483a4d3d037b0fb5a87dae5084ee1
--- /dev/null
+++ b/Tests/MaterialLib/SolidModels/CreateTestConstitutiveRelation.h
@@ -0,0 +1,46 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ * Created on November 7, 2023, 2:57 PM
+ */
+
+#pragma once
+#include <memory>
+
+#include "BaseLib/ConfigTree.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/CoordinateSystem.h"
+
+namespace Tests
+{
+template <typename ConstitutiveLaw>
+std::unique_ptr<ConstitutiveLaw> createTestConstitutiveRelation(
+    const char xml[],
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
+    std::optional<ParameterLib::CoordinateSystem> const& coordinate_system,
+    const bool skip_type_checking,
+    std::function<std::unique_ptr<ConstitutiveLaw>(
+        std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
+            parameters,
+        std::optional<ParameterLib::CoordinateSystem> const& coordinate_system,
+        BaseLib::ConfigTree const& config, const bool skip_type_checking)>
+        createConstitutiveRelation)
+{
+    auto ptree = Tests::readXml(xml);
+    BaseLib::ConfigTree conf(std::move(ptree), "", BaseLib::ConfigTree::onerror,
+                             BaseLib::ConfigTree::onwarning);
+
+    auto const& sub_config = conf.getConfigSubtree("constitutive_relation");
+
+    auto const type = sub_config.peekConfigParameter<std::string>("type");
+
+    return createConstitutiveRelation(parameters, coordinate_system, sub_config,
+                                      skip_type_checking);
+}
+
+}  // namespace Tests
diff --git a/Tests/MaterialLib/SolidModels/TestLinearElasticTransverseIsotropic.cpp b/Tests/MaterialLib/SolidModels/TestLinearElasticTransverseIsotropic.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3ba1b79d1b341321c0e40e027736cf4b6470963e
--- /dev/null
+++ b/Tests/MaterialLib/SolidModels/TestLinearElasticTransverseIsotropic.cpp
@@ -0,0 +1,138 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ * Created on November 7, 2023, 10:39 AM
+ */
+
+#include <gtest/gtest.h>
+
+#include <memory>
+#include <string>
+
+#include "CreateTestConstitutiveRelation.h"
+#include "MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h"
+#include "MaterialLib/SolidModels/CreateLinearElasticTransverseIsotropic.h"
+#include "MaterialLib/SolidModels/LinearElasticOrthotropic.h"
+#include "MaterialLib/SolidModels/LinearElasticTransverseIsotropic.h"
+#include "MathLib/KelvinVector.h"
+#include "ParameterLib/ConstantParameter.h"
+#include "ParameterLib/CoordinateSystem.h"
+
+constexpr char xml_ti[] =
+    "<constitutive_relation> "
+    "    <type>LinearElasticTransverseIsotropic</type>"
+    "    <youngs_modulus_i>E_i</youngs_modulus_i>"
+    "    <youngs_modulus_a>E_a</youngs_modulus_a>"
+    "    <poissons_ratio_ii>nu_i</poissons_ratio_ii>"
+    "    <poissons_ratio_ia>nu_ia</poissons_ratio_ia>"
+    "    <shear_modulus_ia>G_a</shear_modulus_ia>"
+    "</constitutive_relation> ";
+
+constexpr char xml_orth[] =
+    "<constitutive_relation> "
+    "    <type>LinearElasticOrthotropic</type>"
+    "    <youngs_moduli>E0</youngs_moduli>"
+    "    <shear_moduli>G0</shear_moduli>"
+    "    <poissons_ratios>nu0</poissons_ratios>"
+    "</constitutive_relation> ";
+
+std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
+setParametersForLinearElasticTransverseIsotropic(double const E_i,
+                                                 double const E_a,
+                                                 double const nu_i,
+                                                 double const nu_ia,
+                                                 double const G_a)
+{
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> parameters;
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("E_i", E_i));
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("E_a", E_a));
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("nu_i",
+                                                                  nu_i));
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("nu_ia",
+                                                                  nu_ia));
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("G_a", G_a));
+    return parameters;
+}
+
+std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
+setParametersForLinearElasticOrthotropic(std::vector<double> const& E0,
+                                         std::vector<double> const& nu0,
+                                         std::vector<double> const& G0)
+{
+    std::vector<std::unique_ptr<ParameterLib::ParameterBase>> parameters;
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("E0", E0));
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("nu0", nu0));
+    parameters.push_back(
+        std::make_unique<ParameterLib::ConstantParameter<double>>("G0", G0));
+    return parameters;
+}
+
+TEST(MaterialLib, LinearElasticTransverseIsotropic)
+{
+    ParameterLib::ConstantParameter<double> const e1{
+        "e1", {-0.8191520442889918, 0.0, -0.573576436351046}};
+    ParameterLib::ConstantParameter<double> const e2{"e2", {0.0, -1.0, 0.0}};
+    ParameterLib::ConstantParameter<double> const e3{
+        "e3", {-0.573576436351046, 0.0, 0.8191520442889918}};
+    /*ParameterLib::ConstantParameter<double> const e1{"e1", {1, 0.0, 0.0}};
+    ParameterLib::ConstantParameter<double> const e2{"e2", {0.0, 1.0, 0.0}};
+    ParameterLib::ConstantParameter<double> const e3{"e3", {0, 0.0, 1.0}};*/
+    ParameterLib::CoordinateSystem const coordinate_system{e1, e2, e3};
+
+    double const t = std::numeric_limits<double>::quiet_NaN();
+    ParameterLib::SpatialPosition const pos;
+    double const T_ref = std::numeric_limits<double>::quiet_NaN();
+
+    auto const parameters_ti = setParametersForLinearElasticTransverseIsotropic(
+        8.0e9, 4.0e9, 0.35, 0.25, 1.2e9);
+
+    auto const elastic_model_transverse_isotropy =
+        Tests::createTestConstitutiveRelation<
+            MaterialLib::Solids::LinearElasticTransverseIsotropic<3>>(
+            xml_ti, parameters_ti, coordinate_system, false,
+            MaterialLib::Solids::createLinearElasticTransverseIsotropic<3>);
+    auto const E =
+        elastic_model_transverse_isotropy->getElasticTensor(t, pos, T_ref);
+
+    std::vector<double> E0{8.0e9, 8.0e9, 4.0e9};
+    std::vector<double> nu0{0.35, 0.25, 0.25};
+    std::vector<double> G0{2.962962962963e+09, 1.2e9, 1.2e9};
+    auto const parameters_orth =
+        setParametersForLinearElasticOrthotropic(E0, nu0, G0);
+
+    auto const elastic_model_orthotropic =
+        Tests::createTestConstitutiveRelation<
+            MaterialLib::Solids::LinearElasticOrthotropic<3>>(
+            xml_orth, parameters_orth, coordinate_system, false,
+            MaterialLib::Solids::createLinearElasticOrthotropic<3>);
+
+    auto const E_oth =
+        elastic_model_orthotropic->getElasticTensor(t, pos, T_ref);
+
+    ASSERT_LE((E - E_oth).norm() / E.norm(), 1e-14);
+
+    MathLib::KelvinVector::KelvinMatrixType<3> Cel;
+
+    double const k_ti =
+        elastic_model_transverse_isotropy->getBulkModulus(t, pos, &Cel);
+    ASSERT_LE(k_ti - 4301075268.8172045, 1e-14)
+        << "Calculated bulk modulus by the transverse isotropy model: " << k_ti
+        << "\n"
+        << "Expected Bulk modulus: 4301075268.8172045";
+
+    // The definitions of the bulk modulus by LinearElasticOrthotropic and by
+    // LinearElasticTransverseIsotropic are different. Therefore, the comparison
+    // of the bulk modulus values by the models are not presented.
+}