diff --git a/composer.json b/composer.json
index 9984158..983dcd1 100644
--- a/composer.json
+++ b/composer.json
@@ -28,7 +28,7 @@
     },
     "autoload-dev": {
         "psr-4": {
-            "Swader\\Diffbot\\Test\\": "tests"
+            "Swader\\Diffbot\\Test\\": "tests/"
         }
     },
     "extra": {
diff --git a/tests/Abstracts/ApiTest.php b/tests/Abstracts/ApiTest.php
index f10f01d..e14c2ae 100644
--- a/tests/Abstracts/ApiTest.php
+++ b/tests/Abstracts/ApiTest.php
@@ -14,51 +14,54 @@ private function buildMock()
         return $this->getMockForAbstractClass('Swader\Diffbot\Abstracts\Api');
     }
 
-    public function testSetTimeout()
+    public function validTimeouts()
     {
-        /** @var Api $mock */
-        $mock = $this->buildMock();
-
-        $validTimeouts = [
-            0,
-            1000,
-            2000,
-            3000,
-            3000000,
-            40000000,
-            null
+        return [
+            'zero' => [0],
+            '1000' => [1000],
+            '2000' => [2000],
+            '3000' => [3000],
+            '3 mil' => [3000000],
+            '40 mil' => [40000000]
         ];
+    }
 
-        $invalidTimeouts = [
-            -298979879827,
-            -4983,
-            'abcef',
-            '',
-            false
+    public function invalidTimeouts()
+    {
+        return [
+            'negative_big' => [-298979879827],
+            'negative_small' => [-4983],
+            'string ' => ['abcef'],
+            'empty string' => [''],
+            'bool' => [false]
         ];
+    }
 
-        try {
-            $mock->setTimeout();
-        } catch (\InvalidArgumentException $e) {
-            $this->fail('Failed with supposedly valid (empty) timeout.');
-        }
+    public function testSetEmptyTimeoutSuccess()
+    {
+        /** @var Api $mock */
+        $mock = $this->buildMock();
+        $mock->setTimeout();
+    }
 
-        foreach ($validTimeouts as $timeout) {
-            try {
-                $mock->setTimeout($timeout);
-            } catch (\InvalidArgumentException $e) {
-                $this->fail('Failed with supposedly valid timeout: ' . $timeout);
-            }
-        }
+    /**
+     * @dataProvider invalidTimeouts
+     */
+    public function testSetTimeoutInvalid($timeout)
+    {
+        /** @var Api $mock */
+        $mock = $this->buildMock();
+        $this->setExpectedException('InvalidArgumentException');
+        $mock->setTimeout($timeout);
+    }
 
-        foreach ($invalidTimeouts as $timeout) {
-            try {
-                $mock->setTimeout($timeout);
-            } catch (\InvalidArgumentException $e) {
-                // Got expected exception
-                continue;
-            }
-            $this->fail('Failed, assumed invalid parameter was valid.');
-        }
+    /**
+     * @dataProvider validTimeouts
+     */
+    public function testSetTimeoutValid($timeout)
+    {
+        /** @var Api $mock */
+        $mock = $this->buildMock();
+        $mock->setTimeout($timeout);
     }
 }
\ No newline at end of file
diff --git a/tests/DiffbotTest.php b/tests/DiffbotTest.php
index d39d0bc..4ff8e7e 100644
--- a/tests/DiffbotTest.php
+++ b/tests/DiffbotTest.php
@@ -3,7 +3,6 @@
 namespace Swader\Diffbot\Test;
 
 use Swader\Diffbot\Diffbot;
-use Swader\Diffbot\Exceptions\DiffbotException;
 
 /**
  * @runTestsInSeparateProcesses
@@ -11,65 +10,65 @@
 class DiffbotTest extends \PHPUnit_Framework_TestCase
 {
 
-    private $invalidTokens = [
-        '',
-        'a',
-        'ab',
-        'abc',
-        1,
-        12,
-        123,
-        true,
-        array('token')
-    ];
+    public function invalidTokens()
+    {
+        return [
+            'empty'        => [ '' ],
+            'a'            => [ 'a' ],
+            'ab'           => [ 'ab' ],
+            'abc'          => [ 'abc' ],
+            'digit'        => [ 1 ],
+            'double-digit' => [ 12 ],
+            'triple-digit' => [ 123 ],
+            'bool'         => [ true ],
+            'array'        => [ ['token'] ],
+        ];
+    }
 
-    private $validTokens = [
-        'token',
-        '123456789',
-        'akrwejhtn983z420qrzc8397r4'
-    ];
+    public function validTokens()
+    {
+        return [
+            'token'      => [ 'token' ],
+            'short-hash' => [ '123456789' ],
+            'full-hash'  => [ 'akrwejhtn983z420qrzc8397r4' ],
+        ];
+    }
 
-    public function testStaticSetToken()
+    /**
+     * @dataProvider invalidTokens
+     */
+    public function testSetTokenRaisesExceptionOnInvalidToken($token)
     {
-        foreach ($this->invalidTokens as $value) {
-            try {
-                Diffbot::setToken($value);
-            } catch (\InvalidArgumentException $e) {
-                // Good, we got an exception!
-                continue;
-            }
-            $this->fail('Expected exception not raised on value: "' . $value . '".');
-        }
+        $this->setExpectedException('InvalidArgumentException');
+        Diffbot::setToken($token);
+    }
 
-        foreach ($this->validTokens as $value) {
-            Diffbot::setToken($value);
-        }
+    /**
+     * @dataProvider validTokens
+     */
+    public function testSetTokenSucceedsOnValidToken($token)
+    {
+        Diffbot::setToken($token);
+        $bot = new Diffbot();
+        $this->assertInstanceOf('\Swader\Diffbot\Diffbot', $bot);
     }
 
-    public function testInstantiation()
+    public function testInstantiationWithNoGlobalTokenAndNoArgumentRaisesAnException()
     {
-        $exceptionTriggered = false;
-        try {
-            new Diffbot();
-        } catch (DiffbotException $e) {
-            // Great, got it!
-            $exceptionTriggered = true;
-        }
-        if (!$exceptionTriggered) {
-            $this->fail('Empty token did not produce exception!');
-        }
+        $this->setExpectedException('\Swader\Diffbot\Exceptions\DiffbotException');
+        new Diffbot();
+    }
 
-        try {
-            Diffbot::setToken('token');
-            new Diffbot();
-        } catch (DiffbotException $e) {
-            $this->fail('Scenario failed!');
-        }
+    public function testInstantiationWithGlobalTokenAndNoArgumentSucceeds()
+    {
+        Diffbot::setToken('token');
+        $bot = new Diffbot();
+        $this->assertInstanceOf('Swader\Diffbot\Diffbot', $bot);
+    }
 
-        try {
-            new Diffbot('token');
-        } catch (DiffbotException $e) {
-            $this->fail('Scenario failed!');
-        }
+    public function testInstantiationWithNoGlobalTokenButWithArgumentSucceeds()
+    {
+        $bot = new Diffbot('token');
+        $this->assertInstanceOf('Swader\Diffbot\Diffbot', $bot);
     }
 }
\ No newline at end of file
