diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+# Unreleased
+
+# 0.7.0.0
+
+* Add `unitTestTimes`, converting `UnitTest` to `TestTree` with a specified number of test runs.
+* Support GHC 9.4.
+
 # 0.6.0.0
 
 * Expose the `Error Failure` effect in the hedgehog interpret stack to allow throwing `Failure` manually.
diff --git a/lib/Polysemy/Test.hs b/lib/Polysemy/Test.hs
--- a/lib/Polysemy/Test.hs
+++ b/lib/Polysemy/Test.hs
@@ -43,18 +43,19 @@
   -- * Utilities
   UnitTest,
   unitTest,
+  unitTestTimes,
   TestError(TestError),
 ) where
 
 import qualified Data.Text as Text
-import Hedgehog (TestT, property, test, withTests)
+import Hedgehog (TestLimit, TestT, property, test, withTests)
 import Path (File, Path, Rel)
 import Test.Tasty (TestName, TestTree)
 import Test.Tasty.Hedgehog (testProperty)
 
 import Polysemy.Test.Data.Hedgehog (Hedgehog, liftH)
 import Polysemy.Test.Data.Test (Test, fixture, fixturePath, tempDir, tempFile, tempFileContent, testDir)
-import Polysemy.Test.Data.TestError (TestError(TestError))
+import Polysemy.Test.Data.TestError (TestError (TestError))
 import Polysemy.Test.Hedgehog (
   assert,
   assertClose,
@@ -91,13 +92,23 @@
 type UnitTest = TestT IO ()
 
 -- |Convert a @'TestT' IO ()@ to a 'TestTree' ready for use with Tasty's machinery.
--- This is for non-property tests.
+-- This is for non-property tests that are supposed to be executed @n@ times.
+unitTestTimes ::
+  TestLimit ->
+  TestName ->
+  UnitTest ->
+  TestTree
+unitTestTimes n desc =
+  testProperty desc . withTests n . property . test
+
+-- |Convert a @'TestT' IO ()@ to a 'TestTree' ready for use with Tasty's machinery.
+-- This is for non-property tests that are supposed to be executed once.
 unitTest ::
   TestName ->
   UnitTest ->
   TestTree
-unitTest desc =
-  testProperty desc . withTests 1 . property . test
+unitTest =
+  unitTestTimes 1
 
 -- |Read the contents of a file relative to the fixture directory as a list of lines.
 fixtureLines ::
diff --git a/lib/Polysemy/Test/Hedgehog.hs b/lib/Polysemy/Test/Hedgehog.hs
--- a/lib/Polysemy/Test/Hedgehog.hs
+++ b/lib/Polysemy/Test/Hedgehog.hs
@@ -5,7 +5,6 @@
 
 import Control.Monad.Trans.Except (runExceptT)
 import qualified Control.Monad.Trans.Writer.Lazy as MTL
-import GHC.Stack (withFrozenCallStack)
 import qualified Hedgehog as Native
 import Hedgehog.Internal.Property (Failure, Journal, TestT (TestT), failWith)
 
diff --git a/polysemy-test.cabal b/polysemy-test.cabal
--- a/polysemy-test.cabal
+++ b/polysemy-test.cabal
@@ -1,11 +1,11 @@
 cabal-version: 2.2
 
--- This file has been generated from package.yaml by hpack version 0.34.6.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-test
-version:        0.6.0.0
+version:        0.7.0.0
 synopsis:       Polysemy Effects for Testing
 description:    See https://hackage.haskell.org/package/polysemy-test/docs/Polysemy-Test.html
 category:       Test
@@ -59,6 +59,7 @@
       DisambiguateRecordFields
       DoAndIfThenElse
       DuplicateRecordFields
+      EmptyCase
       EmptyDataDecls
       ExistentialQuantification
       FlexibleContexts
@@ -73,8 +74,9 @@
       MultiParamTypeClasses
       MultiWayIf
       NamedFieldPuns
-      OverloadedStrings
+      OverloadedLabels
       OverloadedLists
+      OverloadedStrings
       PackageImports
       PartialTypeSignatures
       PatternGuards
@@ -102,7 +104,7 @@
   build-depends:
       base >=4.12 && <5
     , hedgehog >=1.0.2
-    , incipit-core >=0.3
+    , incipit-core >=0.4
     , path >=0.7
     , path-io >=0.2
     , polysemy >=1.3
@@ -144,6 +146,7 @@
       DisambiguateRecordFields
       DoAndIfThenElse
       DuplicateRecordFields
+      EmptyCase
       EmptyDataDecls
       ExistentialQuantification
       FlexibleContexts
@@ -158,8 +161,9 @@
       MultiParamTypeClasses
       MultiWayIf
       NamedFieldPuns
-      OverloadedStrings
+      OverloadedLabels
       OverloadedLists
+      OverloadedStrings
       PackageImports
       PartialTypeSignatures
       PatternGuards
@@ -187,7 +191,7 @@
   build-depends:
       base >=4.12 && <5
     , hedgehog >=1.0.2
-    , incipit-core >=0.3
+    , incipit-core >=0.4
     , path >=0.7
     , polysemy >=1.3
     , polysemy-test
diff --git a/test/Polysemy/Test/Test/FilesTest.hs b/test/Polysemy/Test/Test/FilesTest.hs
--- a/test/Polysemy/Test/Test/FilesTest.hs
+++ b/test/Polysemy/Test/Test/FilesTest.hs
@@ -1,10 +1,8 @@
-{-# options_ghc -Wno-unused-imports #-}
-
 module Polysemy.Test.Test.FilesTest where
 
 import qualified Data.Text as Text
 import qualified Data.Text.IO as Text
-import Path (File, Rel, relfile, toFilePath)
+import Path (relfile, toFilePath)
 
 import Polysemy.Test (UnitTest, fixtureLines, runTestAuto, runTestInSubdir, tempFileLines, (/==), (===))
 import qualified Polysemy.Test.Data.Test as Test
