diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 1d4a8de9b8240206182a48790ca6e003ea50c96b..b2463211d87d9c634b74586a174d158c26c685ed 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.10)
 add_executable(runCSMCameraModelTests TestyMcTestFace.cpp)
 target_link_libraries(runCSMCameraModelTests usgscsm ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread)
 
-gtest_discover_tests(runCSMCameraModelTests WORKING_DIRECTORY tests)
+gtest_discover_tests(runCSMCameraModelTests WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests)
diff --git a/tests/TestyMcTestFace.cpp b/tests/TestyMcTestFace.cpp
index e79d958accb9d50b767cad04a656b131eecece3a..29558227ed4e2723747f34504edae5c9eee97d51 100644
--- a/tests/TestyMcTestFace.cpp
+++ b/tests/TestyMcTestFace.cpp
@@ -1,7 +1,9 @@
 #include "UsgsAstroFramePlugin.h"
+#include "UsgsAstroFrameSensorModel.h"
 
 #include <json/json.hpp>
 
+#include <sstream>
 #include <fstream>
 
 #include <gtest/gtest.h>
@@ -16,10 +18,18 @@ class FrameIsdTest : public ::testing::Test {
    virtual void SetUp() {
       std::ifstream isdFile("data/simpleFramerISD.json");
       json jsonIsd = json::parse(isdFile);
-      isd.clearAllParams();
       for (json::iterator it = jsonIsd.begin(); it != jsonIsd.end(); ++it) {
-         isd.addParam(it.key(), it.value().dump());
+         json jsonValue = it.value();
+         if (jsonValue.size() > 1) {
+            for (int i = 0; i < jsonValue.size(); i++) {
+               isd.addParam(it.key(), jsonValue[i].dump());
+            }
+         }
+         else {
+            isd.addParam(it.key(), jsonValue.dump());
+         }
       }
+      isdFile.close();
    }
 };
 
@@ -78,12 +88,50 @@ TEST(FramePluginTests, MissingStateValue) {
          badState));;
 }
 
-/* TEST_F(FrameIsdTest, ConstructFromISD) {
+TEST_F(FrameIsdTest, Constructible) {
    UsgsAstroFramePlugin testPlugin;
    EXPECT_TRUE(testPlugin.canModelBeConstructedFromISD(
                isd,
                "USGS_ASTRO_FRAME_SENSOR_MODEL"));
-} */
+}
+
+TEST_F(FrameIsdTest, ConstructValidCamera) {
+   UsgsAstroFramePlugin testPlugin;
+   csm::Model *cameraModel = NULL;
+   EXPECT_NO_THROW(
+         cameraModel = testPlugin.constructModelFromISD(
+               isd,
+               "USGS_ASTRO_FRAME_SENSOR_MODEL",
+               NULL)
+   );
+   UsgsAstroFrameSensorModel *frameModel = dynamic_cast<UsgsAstroFrameSensorModel *>(cameraModel);
+   EXPECT_NE(frameModel, nullptr);
+   if (cameraModel) {
+      delete cameraModel;
+   }
+}
+
+TEST_F(FrameIsdTest, ConstructInValidCamera) {
+   UsgsAstroFramePlugin testPlugin;
+   // Remove the model_name keyword from the ISD to make it invalid
+   isd.clearParams("model_name");
+   csm::Model *cameraModel = NULL;
+   try {
+      testPlugin.constructModelFromISD(
+            isd,
+            "USGS_ASTRO_FRAME_SENSOR_MODEL",
+            NULL);
+   }
+   catch(csm::Error &e) {
+      EXPECT_EQ(e.getError(), csm::Error::ISD_NOT_SUPPORTED);
+   }
+   catch(...) {
+      FAIL() << "Expected csm ISD_NOT_SUPPORTED error";
+   }
+   if (cameraModel) {
+      delete cameraModel;
+   }
+}
 
 int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
diff --git a/tests/data/simpleFramerISD.json b/tests/data/simpleFramerISD.json
index 8e4f7ebf41509e3650ba9fee69708d594f0d7ede..7235ecb5f087d032b046b3dcb57edf7324ab02cc 100644
--- a/tests/data/simpleFramerISD.json
+++ b/tests/data/simpleFramerISD.json
@@ -9,7 +9,7 @@
         7.5
     ],
     "ephemeris_time": 100.0,
-    "focal_length": 500,
+    "focal_length": 50,
     "focal_length_epsilon": 1.0,
     "ifov": 6.0,
     "model_name": "UsgsAstroFramePluginCSM",
@@ -80,7 +80,6 @@
         0.0
     ],
     "odt_y": [
-        0.0,
         0.0,
         1.0,
         0.0,
@@ -89,6 +88,7 @@
         0.0,
         0.0,
         0.0,
+        0.0,
         0.0
     ],
     "starting_detector_line": 0.0,