diff --git a/test/1.1/Mean.cpp b/test/1.1/Mean.cpp
index 10ca3ae..b307490 100644
--- a/test/1.1/Mean.cpp
+++ b/test/1.1/Mean.cpp
@@ -89,8 +89,11 @@
     android::sp<IMemory> outMemory = AddPoolAndGetData<float>(expectedOutput.GetNumElements(), request);
     const float* outputData = static_cast<const float*>(static_cast<void*>(outMemory->getPointer()));
 
-    V1_0::ErrorStatus execStatus = Execute(preparedModel, request);
-    BOOST_TEST(execStatus == V1_0::ErrorStatus::NONE);
+    if (preparedModel.get() != nullptr)
+    {
+        V1_0::ErrorStatus execStatus = Execute(preparedModel, request);
+        BOOST_TEST(execStatus == V1_0::ErrorStatus::NONE);
+    }
 
     const float* expectedOutputData = expectedOutput.GetData();
     for (unsigned int i = 0; i < expectedOutput.GetNumElements(); i++)
diff --git a/test/1.1/Transpose.cpp b/test/1.1/Transpose.cpp
index 5679ca2..7a36130 100644
--- a/test/1.1/Transpose.cpp
+++ b/test/1.1/Transpose.cpp
@@ -89,7 +89,10 @@
     android::sp<IMemory> outMemory = AddPoolAndGetData<float>(expectedOutputTensor.GetNumElements(), request);
     float* outdata = static_cast<float*>(static_cast<void*>(outMemory->getPointer()));
 
-    auto execStatus = Execute(preparedModel, request);
+    if (preparedModel.get() != nullptr)
+    {
+        auto execStatus = Execute(preparedModel, request);
+    }
 
     const float * expectedOutput = expectedOutputTensor.GetData();
     for (unsigned int i = 0; i < expectedOutputTensor.GetNumElements(); ++i)
diff --git a/test/Concurrent.cpp b/test/Concurrent.cpp
index ecf25e1..0694934 100644
--- a/test/Concurrent.cpp
+++ b/test/Concurrent.cpp
@@ -51,12 +51,20 @@
 
     // make the prepared models
     const size_t maxRequests = 5;
+    size_t preparedModelsSize = 0;
     android::sp<V1_0::IPreparedModel> preparedModels[maxRequests];
     for (size_t i = 0; i < maxRequests; ++i)
     {
-        preparedModels[i] = PrepareModel(model, *driver);
+        auto preparedModel = PrepareModel(model, *driver);
+        if (preparedModel.get() != nullptr)
+        {
+            preparedModels[i] = PrepareModel(model, *driver);
+            preparedModelsSize++;
+        }
     }
 
+    BOOST_TEST(maxRequests == preparedModelsSize);
+
     // construct the request data
     DataLocation inloc = {};
     inloc.poolIndex = 0;
diff --git a/test/Convolution2D.hpp b/test/Convolution2D.hpp
index 38216f1..c471fbd 100644
--- a/test/Convolution2D.hpp
+++ b/test/Convolution2D.hpp
@@ -104,7 +104,10 @@
     float* outdata = reinterpret_cast<float*>(static_cast<void*>(outMemory->getPointer()));
 
     // run the execution
-    Execute(preparedModel, request);
+    if (preparedModel.get() != nullptr)
+    {
+        Execute(preparedModel, request);
+    }
 
     // check the result
     switch (paddingScheme)
diff --git a/test/DriverTestHelpers.cpp b/test/DriverTestHelpers.cpp
index 0bc0cf7..18e3377 100644
--- a/test/DriverTestHelpers.cpp
+++ b/test/DriverTestHelpers.cpp
@@ -182,6 +182,7 @@
 android::sp<ExecutionCallback> ExecuteNoWait(android::sp<V1_0::IPreparedModel> preparedModel,
                                              const V1_0::Request& request)
 {
+    BOOST_TEST(preparedModel.get() != nullptr);
     android::sp<ExecutionCallback> cb(new ExecutionCallback());
     BOOST_TEST(preparedModel->execute(request, cb) == V1_0::ErrorStatus::NONE);
     ALOGI("ExecuteNoWait: returning callback object");
diff --git a/test/FullyConnected.cpp b/test/FullyConnected.cpp
index a6983dd..2f9cd4b 100644
--- a/test/FullyConnected.cpp
+++ b/test/FullyConnected.cpp
@@ -77,7 +77,10 @@
     float* outdata = static_cast<float*>(static_cast<void*>(outMemory->getPointer()));
 
     // run the execution
-    Execute(preparedModel, request);
+    if (preparedModel.get() != nullptr)
+    {
+        Execute(preparedModel, request);
+    }
 
     // check the result
     BOOST_TEST(outdata[0] == 152);
@@ -156,7 +159,10 @@
     float* outdata = static_cast<float*>(static_cast<void*>(outMemory->getPointer()));
 
     // run the execution
-    Execute(preparedModel, request);
+    if (preparedModel != nullptr)
+    {
+        Execute(preparedModel, request);
+    }
 
     // check the result
     BOOST_TEST(outdata[0] == 1);
@@ -242,7 +248,10 @@
     float* outdata = static_cast<float*>(static_cast<void*>(outMemory->getPointer()));
 
     // run the execution
-    Execute(preparedModel, request);
+    if (preparedModel != nullptr)
+    {
+        Execute(preparedModel, request);
+    }
 
     // check the result
     BOOST_TEST(outdata[0] == 1);
