diff --git a/msgpack-types.cabal b/msgpack-types.cabal
--- a/msgpack-types.cabal
+++ b/msgpack-types.cabal
@@ -1,5 +1,5 @@
 name:                 msgpack-types
-version:              0.3.0
+version:              0.3.1
 synopsis:             A Haskell implementation of MessagePack.
 homepage:             http://msgpack.org/
 license:              BSD3
@@ -56,6 +56,7 @@
   hs-source-dirs: test
   main-is: testsuite.hs
   other-modules:
+      Data.MessagePack.Arbitrary
       Data.MessagePack.Types.AssocSpec
       Data.MessagePack.Types.ClassSpec
   ghc-options:
diff --git a/test/Data/MessagePack/Arbitrary.hs b/test/Data/MessagePack/Arbitrary.hs
new file mode 100644
--- /dev/null
+++ b/test/Data/MessagePack/Arbitrary.hs
@@ -0,0 +1,28 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE StrictData  #-}
+{-# LANGUAGE Trustworthy #-}
+module Data.MessagePack.Arbitrary () where
+
+import qualified Data.ByteString           as S
+import           Data.MessagePack.Types    (Object (..))
+import qualified Data.Text                 as T
+import qualified Data.Vector               as V
+import           Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
+import qualified Test.QuickCheck.Gen       as Gen
+
+
+instance Arbitrary Object where
+    arbitrary = Gen.sized $ \n -> Gen.oneof
+        [ pure ObjectNil
+        , ObjectBool   <$> arbitrary
+        , ObjectInt    <$> negatives
+        , ObjectWord   <$> arbitrary
+        , ObjectFloat  <$> arbitrary
+        , ObjectDouble <$> arbitrary
+        , ObjectStr    <$> (T.pack <$> arbitrary)
+        , ObjectBin    <$> (S.pack <$> arbitrary)
+        , ObjectArray  <$> (V.fromList <$> Gen.resize (n `div` 2) arbitrary)
+        , ObjectMap    <$> (V.fromList <$> Gen.resize (n `div` 4) arbitrary)
+        , ObjectExt    <$> arbitrary <*> (S.pack <$> arbitrary)
+        ]
+        where negatives = Gen.choose (minBound, -1)
