diff --git a/dns.cabal b/dns.cabal
--- a/dns.cabal
+++ b/dns.cabal
@@ -1,5 +1,5 @@
 Name:                   dns
-Version:                0.3.7
+Version:                0.3.8
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -51,6 +51,18 @@
                       , network-conduit
                       , random
 
+Test-Suite network
+  Type:                 exitcode-stdio-1.0
+  Default-Language:     Haskell2010
+  Hs-Source-Dirs:       test2
+  Ghc-Options:          -Wall
+  Main-Is:              Spec.hs
+  Other-Modules:        LookupSpec
+  Build-Depends:        dns
+                      , base
+                      , bytestring
+                      , hspec
+
 Test-Suite spec
   Type:                 exitcode-stdio-1.0
   Default-Language:     Haskell2010
@@ -58,7 +70,6 @@
   Ghc-Options:          -Wall
   Main-Is:              Spec.hs
   Other-Modules:        EncodeSpec
-                        LookupSpec
   Build-Depends:        base
                       , attoparsec
                       , attoparsec-conduit
diff --git a/test/LookupSpec.hs b/test/LookupSpec.hs
deleted file mode 100644
--- a/test/LookupSpec.hs
+++ /dev/null
@@ -1,67 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module LookupSpec where
-
-import Control.Applicative
-import qualified Data.ByteString.Char8 as BS
-import Data.List
-import Network.DNS as DNS
-import Test.Hspec
-
-spec :: Spec
-spec = do
-    describe "lookupA" $ do
-        it "gets IPv4 addresses" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver ->
-                DNS.lookupA resolver "www.mew.org" `shouldReturn` Just ["202.232.15.101"]
-
-        it "gets IPv4 addresses via CNAME" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver ->
-                DNS.lookupA resolver "www.kame.net" `shouldReturn` Just ["203.178.141.194"]
-
-    describe "lookupAAAA" $ do
-        it "gets IPv6 addresses" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver -> do
-                DNS.lookupAAAA resolver "mew.org" `shouldReturn` Nothing
-                DNS.lookupAAAA resolver "www.mew.org" `shouldReturn` Just ["2001:240:11e:c00::101"]
-
-    describe "lookupNS" $ do
-        it "gets NS" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver -> do
-                actual <- DNS.lookupNS resolver "mew.org"
-                let expected = Just ["ns1.mew.org.", "ns2.mew.org."]
-                -- The order of NS records is variable, so we sort the
-                -- result.
-                sort <$> actual `shouldBe` expected
-
-    describe "lookupTXT" $ do
-        it "gets TXT" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver ->
-                DNS.lookupTXT resolver "mew.org" `shouldReturn` Just ["v=spf1 +mx -all"]
-
-    describe "lookupAviaMX" $ do
-        it "gets IPv4 addresses via MX" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver -> do
-                as <- DNS.lookupAviaMX resolver "mixi.jp"
-                sort <$> as `shouldBe` Just ["202.32.29.4", "202.32.29.5"]
-
-    describe "lookupPTR" $ do
-        it "gets PTR" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver -> do
-                let target = "210.130.137.80"
-                    rev = BS.intercalate "." (reverse (BS.split '.' target))
-                            `BS.append` ".in-addr.arpa"
-                DNS.lookupPTR resolver rev `shouldReturn` Just ["www-v4.iij.ad.jp."]
-
-    describe "lookupSRV" $ do
-        it "gets SRV" $ do
-            rs <- makeResolvSeed defaultResolvConf
-            withResolver rs $ \resolver ->
-                DNS.lookupSRV resolver "_sip._tcp.cisco.com" `shouldReturn` Just [(1,0,5060,"vcsgw.cisco.com.")]
diff --git a/test2/LookupSpec.hs b/test2/LookupSpec.hs
new file mode 100644
--- /dev/null
+++ b/test2/LookupSpec.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module LookupSpec where
+
+import Control.Applicative
+import qualified Data.ByteString.Char8 as BS
+import Data.List
+import Network.DNS as DNS
+import Test.Hspec
+
+spec :: Spec
+spec = do
+    describe "lookupA" $ do
+        it "gets IPv4 addresses" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver ->
+                DNS.lookupA resolver "www.mew.org" `shouldReturn` Just ["202.232.15.101"]
+
+        it "gets IPv4 addresses via CNAME" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver ->
+                DNS.lookupA resolver "www.kame.net" `shouldReturn` Just ["203.178.141.194"]
+
+    describe "lookupAAAA" $ do
+        it "gets IPv6 addresses" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver -> do
+                DNS.lookupAAAA resolver "mew.org" `shouldReturn` Nothing
+                DNS.lookupAAAA resolver "www.mew.org" `shouldReturn` Just ["2001:240:11e:c00::101"]
+
+    describe "lookupNS" $ do
+        it "gets NS" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver -> do
+                actual <- DNS.lookupNS resolver "mew.org"
+                let expected = Just ["ns1.mew.org.", "ns2.mew.org."]
+                -- The order of NS records is variable, so we sort the
+                -- result.
+                sort <$> actual `shouldBe` expected
+
+    describe "lookupTXT" $ do
+        it "gets TXT" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver ->
+                DNS.lookupTXT resolver "mew.org" `shouldReturn` Just ["v=spf1 +mx -all"]
+
+    describe "lookupAviaMX" $ do
+        it "gets IPv4 addresses via MX" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver -> do
+                as <- DNS.lookupAviaMX resolver "mixi.jp"
+                sort <$> as `shouldBe` Just ["202.32.29.4", "202.32.29.5"]
+
+    describe "lookupPTR" $ do
+        it "gets PTR" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver -> do
+                let target = "210.130.137.80"
+                    rev = BS.intercalate "." (reverse (BS.split '.' target))
+                            `BS.append` ".in-addr.arpa"
+                DNS.lookupPTR resolver rev `shouldReturn` Just ["www-v4.iij.ad.jp."]
+
+    describe "lookupSRV" $ do
+        it "gets SRV" $ do
+            rs <- makeResolvSeed defaultResolvConf
+            withResolver rs $ \resolver ->
+                DNS.lookupSRV resolver "_sip._tcp.cisco.com" `shouldReturn` Just [(1,0,5060,"vcsgw.cisco.com.")]
diff --git a/test2/Spec.hs b/test2/Spec.hs
new file mode 100644
--- /dev/null
+++ b/test2/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
