diff --git a/core/fpdfapi/cpdf_modulemgr.cpp b/core/fpdfapi/cpdf_modulemgr.cpp
index 34fe049..889e557 100644
--- a/core/fpdfapi/cpdf_modulemgr.cpp
+++ b/core/fpdfapi/cpdf_modulemgr.cpp
@@ -37,29 +37,32 @@
 }  // namespace
 
 // static
-CPDF_ModuleMgr* CPDF_ModuleMgr::Get() {
-  if (!g_pDefaultMgr)
-    g_pDefaultMgr = new CPDF_ModuleMgr;
-  return g_pDefaultMgr;
+void CPDF_ModuleMgr::Create() {
+  ASSERT(!g_pDefaultMgr);
+  g_pDefaultMgr = new CPDF_ModuleMgr;
+  g_pDefaultMgr->InitCodecModule();
+  g_pDefaultMgr->InitPageModule();
+  g_pDefaultMgr->LoadEmbeddedMaps();
+  g_pDefaultMgr->LoadCodecModules();
 }
 
 // static
 void CPDF_ModuleMgr::Destroy() {
+  ASSERT(g_pDefaultMgr);
   delete g_pDefaultMgr;
   g_pDefaultMgr = nullptr;
 }
 
-CPDF_ModuleMgr::CPDF_ModuleMgr() {}
-
-CPDF_ModuleMgr::~CPDF_ModuleMgr() {}
-
-void CPDF_ModuleMgr::Init() {
-  InitCodecModule();
-  InitPageModule();
-  LoadEmbeddedMaps();
-  LoadCodecModules();
+// static
+CPDF_ModuleMgr* CPDF_ModuleMgr::Get() {
+  ASSERT(g_pDefaultMgr);
+  return g_pDefaultMgr;
 }
 
+CPDF_ModuleMgr::CPDF_ModuleMgr() = default;
+
+CPDF_ModuleMgr::~CPDF_ModuleMgr() = default;
+
 CCodec_FaxModule* CPDF_ModuleMgr::GetFaxModule() {
   return m_pCodecModule->GetFaxModule();
 }
diff --git a/core/fpdfapi/cpdf_modulemgr.h b/core/fpdfapi/cpdf_modulemgr.h
index 69b4833..e916947 100644
--- a/core/fpdfapi/cpdf_modulemgr.h
+++ b/core/fpdfapi/cpdf_modulemgr.h
@@ -35,12 +35,11 @@
 
 class CPDF_ModuleMgr {
  public:
-  static CPDF_ModuleMgr* Get();
+  static void Create();
   static void Destroy();
+  static CPDF_ModuleMgr* Get();
   static const int kFileBufSize = 512;
 
-  void Init();
-
   void SetUnsupportInfoAdapter(
       std::unique_ptr<fpdfapi::UnsupportedInfoAdapter> pAdapter) {
     m_pUnsupportInfoAdapter = std::move(pAdapter);
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 975b3c9..1ce21f4 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -25,11 +25,8 @@
 
 class CPDF_PageContentGeneratorTest : public testing::Test {
  protected:
-  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
-
-  void TearDown() override {
-    CPDF_ModuleMgr::Destroy();
-  }
+  void SetUp() override { CPDF_ModuleMgr::Create(); }
+  void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 
   void TestProcessPath(CPDF_PageContentGenerator* pGen,
                        std::ostringstream* buf,
diff --git a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
index 4166a93..fe10bc9 100644
--- a/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont_unittest.cpp
@@ -15,8 +15,7 @@
 
 class CPDF_CIDFontTest : public testing::Test {
  protected:
-  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
-
+  void SetUp() override { CPDF_ModuleMgr::Create(); }
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index 5078bf4..682ac95 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -151,7 +151,7 @@
 
 class cpdf_document_test : public testing::Test {
  public:
-  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
+  void SetUp() override { CPDF_ModuleMgr::Create(); }
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp b/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
index 85db7d3..fda209f 100644
--- a/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_hint_tables_unittest.cpp
@@ -63,7 +63,7 @@
  public:
   CPDF_HintTablesTest() {
     // Needs for encoding Hint table stream.
-    CPDF_ModuleMgr::Get()->Init();
+    CPDF_ModuleMgr::Create();
   }
 
   ~CPDF_HintTablesTest() override { CPDF_ModuleMgr::Destroy(); }
diff --git a/core/fxge/cfx_gemodule.cpp b/core/fxge/cfx_gemodule.cpp
index b9b232d..ea6b4ac 100644
--- a/core/fxge/cfx_gemodule.cpp
+++ b/core/fxge/cfx_gemodule.cpp
@@ -17,17 +17,19 @@
 
 }  // namespace
 
-CFX_GEModule::CFX_GEModule()
-    : m_pFontMgr(pdfium::MakeUnique<CFX_FontMgr>()),
-      m_pPlatform(PlatformIface::Create()) {}
+CFX_GEModule::CFX_GEModule(const char** pUserFontPaths)
+    : m_pFontCache(pdfium::MakeUnique<CFX_FontCache>()),
+      m_pFontMgr(pdfium::MakeUnique<CFX_FontMgr>()),
+      m_pPlatform(PlatformIface::Create()),
+      m_pUserFontPaths(pUserFontPaths) {}
 
 CFX_GEModule::~CFX_GEModule() = default;
 
 // static
-CFX_GEModule* CFX_GEModule::Get() {
-  if (!g_pGEModule)
-    g_pGEModule = new CFX_GEModule();
-  return g_pGEModule;
+void CFX_GEModule::Create(const char** pUserFontPaths) {
+  ASSERT(!g_pGEModule);
+  g_pGEModule = new CFX_GEModule(pUserFontPaths);
+  g_pGEModule->m_pPlatform->Init();
 }
 
 // static
@@ -37,14 +39,8 @@
   g_pGEModule = nullptr;
 }
 
-void CFX_GEModule::Init(const char** userFontPaths) {
+// static
+CFX_GEModule* CFX_GEModule::Get() {
   ASSERT(g_pGEModule);
-  m_pUserFontPaths = userFontPaths;
-  m_pPlatform->Init();
-}
-
-CFX_FontCache* CFX_GEModule::GetFontCache() {
-  if (!m_pFontCache)
-    m_pFontCache = pdfium::MakeUnique<CFX_FontCache>();
-  return m_pFontCache.get();
+  return g_pGEModule;
 }
diff --git a/core/fxge/cfx_gemodule.h b/core/fxge/cfx_gemodule.h
index afcbff4..59eddb7 100644
--- a/core/fxge/cfx_gemodule.h
+++ b/core/fxge/cfx_gemodule.h
@@ -22,23 +22,23 @@
     virtual void Init() = 0;
   };
 
-  static CFX_GEModule* Get();
+  static void Create(const char** pUserFontPaths);
   static void Destroy();
+  static CFX_GEModule* Get();
 
-  void Init(const char** pUserFontPaths);
-  CFX_FontCache* GetFontCache();
+  CFX_FontCache* GetFontCache() const { return m_pFontCache.get(); }
   CFX_FontMgr* GetFontMgr() const { return m_pFontMgr.get(); }
   PlatformIface* GetPlatform() const { return m_pPlatform.get(); }
   const char** GetUserFontPaths() const { return m_pUserFontPaths; }
 
  private:
-  CFX_GEModule();
+  explicit CFX_GEModule(const char** pUserFontPaths);
   ~CFX_GEModule();
 
-  std::unique_ptr<CFX_FontCache> m_pFontCache;
-  std::unique_ptr<CFX_FontMgr> m_pFontMgr;
-  std::unique_ptr<PlatformIface> m_pPlatform;
-  const char** m_pUserFontPaths = nullptr;
+  std::unique_ptr<CFX_FontCache> const m_pFontCache;
+  std::unique_ptr<CFX_FontMgr> const m_pFontMgr;
+  std::unique_ptr<PlatformIface> const m_pPlatform;
+  const char** const m_pUserFontPaths;
 };
 
 #endif  // CORE_FXGE_CFX_GEMODULE_H_
diff --git a/fpdfsdk/fpdf_catalog_unittest.cpp b/fpdfsdk/fpdf_catalog_unittest.cpp
index 180fb79..ff3adcf 100644
--- a/fpdfsdk/fpdf_catalog_unittest.cpp
+++ b/fpdfsdk/fpdf_catalog_unittest.cpp
@@ -27,7 +27,7 @@
 class PDFCatalogTest : public testing::Test {
  public:
   void SetUp() override {
-    CPDF_ModuleMgr::Get()->Init();
+    CPDF_ModuleMgr::Create();
     auto pTestDoc = pdfium::MakeUnique<CPDF_TestDocument>();
     m_pDoc.reset(FPDFDocumentFromCPDFDocument(pTestDoc.release()));
     m_pRootObj = pdfium::MakeRetain<CPDF_Dictionary>();
diff --git a/fpdfsdk/fpdf_doc_unittest.cpp b/fpdfsdk/fpdf_doc_unittest.cpp
index b0337e8..08517d7 100644
--- a/fpdfsdk/fpdf_doc_unittest.cpp
+++ b/fpdfsdk/fpdf_doc_unittest.cpp
@@ -40,7 +40,7 @@
   };
 
   void SetUp() override {
-    CPDF_ModuleMgr::Get()->Init();
+    CPDF_ModuleMgr::Create();
     auto pTestDoc = pdfium::MakeUnique<CPDF_TestDocument>();
     m_pIndirectObjs = pTestDoc->GetHolder();
     m_pRootObj.Reset(m_pIndirectObjs->NewIndirect<CPDF_Dictionary>());
diff --git a/fpdfsdk/fpdf_edit_unittest.cpp b/fpdfsdk/fpdf_edit_unittest.cpp
index 499a655..1fcd93d 100644
--- a/fpdfsdk/fpdf_edit_unittest.cpp
+++ b/fpdfsdk/fpdf_edit_unittest.cpp
@@ -8,8 +8,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 class PDFEditTest : public testing::Test {
-  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
-
+  void SetUp() override { CPDF_ModuleMgr::Create(); }
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/fpdfsdk/fpdf_editimg_unittest.cpp b/fpdfsdk/fpdf_editimg_unittest.cpp
index fa04758..81a4877 100644
--- a/fpdfsdk/fpdf_editimg_unittest.cpp
+++ b/fpdfsdk/fpdf_editimg_unittest.cpp
@@ -9,8 +9,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 class PDFEditImgTest : public testing::Test {
-  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
-
+  void SetUp() override { CPDF_ModuleMgr::Create(); }
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index f9bc6c0..3712697 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -158,12 +158,8 @@
     return;
 
   FXMEM_InitializePartitionAlloc();
-
-  CFX_GEModule* pModule = CFX_GEModule::Get();
-  pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr);
-
-  CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
-  pModuleMgr->Init();
+  CFX_GEModule::Create(cfg ? cfg->m_pUserFontPaths : nullptr);
+  CPDF_ModuleMgr::Create();
 
 #ifdef PDF_ENABLE_XFA
   BC_Library_Init();
@@ -184,7 +180,6 @@
 
   CPDF_ModuleMgr::Destroy();
   CFX_GEModule::Destroy();
-
   IJS_Runtime::Destroy();
 
   g_bLibraryInitialized = false;
diff --git a/testing/BUILD.gn b/testing/BUILD.gn
index d2a0411..9eee51c 100644
--- a/testing/BUILD.gn
+++ b/testing/BUILD.gn
@@ -17,6 +17,7 @@
     "string_write_stream.h",
     "test_loader.cpp",
     "test_loader.h",
+    "test_support.cpp",
     "test_support.h",
     "utils/bitmap_saver.cpp",
     "utils/bitmap_saver.h",
@@ -34,6 +35,7 @@
     "../:pdfium_public_headers",
     "../core/fdrm",
     "../core/fxcrt",
+    "../core/fxge",
     "image_diff",
   ]
   configs += [ "../:pdfium_core_config" ]
diff --git a/testing/test_support.cpp b/testing/test_support.cpp
new file mode 100644
index 0000000..94ce528
--- /dev/null
+++ b/testing/test_support.cpp
@@ -0,0 +1,15 @@
+// Copyright 2019 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "testing/test_support.h"
+
+#include "core/fxge/cfx_gemodule.h"
+
+void InitializePDFTestEnvironment() {
+  CFX_GEModule::Create(nullptr);
+}
+
+void DestroyPDFTestEnvironment() {
+  CFX_GEModule::Destroy();
+}
diff --git a/testing/test_support.h b/testing/test_support.h
index f257787..f237ea5 100644
--- a/testing/test_support.h
+++ b/testing/test_support.h
@@ -5,6 +5,8 @@
 #ifndef TESTING_TEST_SUPPORT_H_
 #define TESTING_TEST_SUPPORT_H_
 
+#include <stdint.h>
+
 namespace pdfium {
 
 #define STR_IN_TEST_CASE(input_literal, ...)               \
@@ -44,4 +46,7 @@
 
 }  // namespace pdfium
 
+void InitializePDFTestEnvironment();
+void DestroyPDFTestEnvironment();
+
 #endif  // TESTING_TEST_SUPPORT_H_
diff --git a/testing/unit_test_main.cpp b/testing/unit_test_main.cpp
index 44918fc..35c4939 100644
--- a/testing/unit_test_main.cpp
+++ b/testing/unit_test_main.cpp
@@ -8,6 +8,7 @@
 #include "core/fxcrt/fx_memory.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "testing/test_support.h"
 
 #ifdef PDF_ENABLE_V8
 #include "testing/v8_initializer.h"
@@ -36,6 +37,7 @@
 #endif  // V8_USE_EXTERNAL_STARTUP_DATA
 #endif  // PDF_ENABLE_V8
 
+  InitializePDFTestEnvironment();
 #ifdef PDF_ENABLE_XFA
   InitializeXFATestEnvironment();
 #endif  // PDF_ENABLE_XFA
@@ -45,6 +47,9 @@
 
   int ret_val = RUN_ALL_TESTS();
 
+  DestroyPDFTestEnvironment();
+  // NOTE: XFA test environment, if present, destroyed by gtest.
+
 #ifdef PDF_ENABLE_V8
   v8::V8::ShutdownPlatform();
 #endif  // PDF_ENABLE_V8
diff --git a/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp b/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
index e06e04c..f9bd450 100644
--- a/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
+++ b/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
@@ -21,10 +21,10 @@
  public:
   CFGAS_StringFormatterTest() {
     SetTZ("UTC");
-    CPDF_ModuleMgr::Get()->Init();
+    CPDF_ModuleMgr::Create();
   }
 
-  ~CFGAS_StringFormatterTest() override { CPDF_ModuleMgr::Get()->Destroy(); }
+  ~CFGAS_StringFormatterTest() override { CPDF_ModuleMgr::Destroy(); }
 
   void TearDown() override {
     fmt_.reset();
