diff --git a/mockery.cabal b/mockery.cabal
--- a/mockery.cabal
+++ b/mockery.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           mockery
-version:        0.2.1
+version:        0.3.0
 synopsis:       Support functions for automated testing
 description:    Support functions for automated testing
 category:       Testing
@@ -30,6 +30,7 @@
     , bytestring
     , temporary
     , directory
+    , filepath
     , logging-facade
   ghc-options: -Wall
   default-language: Haskell2010
@@ -46,6 +47,7 @@
     , bytestring
     , temporary
     , directory
+    , filepath
     , logging-facade
 
     , mockery
diff --git a/src/Test/Mockery/Directory.hs b/src/Test/Mockery/Directory.hs
--- a/src/Test/Mockery/Directory.hs
+++ b/src/Test/Mockery/Directory.hs
@@ -8,6 +8,7 @@
 import           Control.Exception
 import           Control.Monad
 import           System.Directory
+import           System.FilePath
 import           System.IO.Error
 import           System.IO hiding (withFile)
 import           System.IO.Temp (withSystemTempDirectory, withSystemTempFile)
@@ -47,9 +48,11 @@
   action file
 
 -- |
--- Update the modification time of the specified file.  Create an empty file if
+-- Update the modification time of the specified file.
+-- Create an empty file (including any missing directories in the file path) if
 -- the file does not exist.
 touch :: FilePath -> IO ()
 touch file = do
+  createDirectoryIfMissing True (takeDirectory file)
   c <- catchJust (guard . isDoesNotExistError) (B.readFile file) (const $ return B.empty)
   B.writeFile file c
diff --git a/test/Test/Mockery/DirectorySpec.hs b/test/Test/Mockery/DirectorySpec.hs
--- a/test/Test/Mockery/DirectorySpec.hs
+++ b/test/Test/Mockery/DirectorySpec.hs
@@ -27,6 +27,10 @@
         touch name
         readFile name `shouldReturn` ""
 
+      it "creates any missing directories" $ do
+        touch "foo/bar/baz"
+        readFile "foo/bar/baz" `shouldReturn` ""
+
       context "when file already exists" $ do
         before_ (writeFile name "bar") $ do
           it "updates modification time" $ do
