diff --git a/tests/Fixtures/child-template.php b/tests/Fixtures/nested-template.php
similarity index 100%
rename from tests/Fixtures/child-template.php
rename to tests/Fixtures/nested-template.php
diff --git a/tests/Fixtures/root-template.php b/tests/Fixtures/root-template.php
index b4e0f033659ce14df4603796efd5211e2f91d44c..a88c0b246eb29ff30d473c35b506ad88d9cf09f1 100644
--- a/tests/Fixtures/root-template.php
+++ b/tests/Fixtures/root-template.php
@@ -1 +1 @@
-This is a content of nested template: <?php $this->output_render('child-template'); ?>
+This is a content of nested template: <?php $this->output_render('nested-template'); ?>
diff --git a/tests/Fixtures/simple.php b/tests/Fixtures/simple.php
new file mode 100644
index 0000000000000000000000000000000000000000..50503d9a1674f316c6dcf7a07967a280b0a3bcde
--- /dev/null
+++ b/tests/Fixtures/simple.php
@@ -0,0 +1,2 @@
+<?php
+    echo 'outputText';
diff --git a/tests/Fixtures/some_template.php b/tests/Fixtures/some_template.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5dc4cfd49620945fc2533277ca40be6028267ba
--- /dev/null
+++ b/tests/Fixtures/some_template.php
@@ -0,0 +1 @@
+this is dummy text
diff --git a/tests/Fixtures/theme-template/child-template.php b/tests/Fixtures/theme-template/child-template.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/Fixtures/with-parameter.php b/tests/Fixtures/with-parameter.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d12c577a66cb543b6feab1a4f798b0a4cc2144e
--- /dev/null
+++ b/tests/Fixtures/with-parameter.php
@@ -0,0 +1 @@
+passed parameter: <?php echo $params['custom_parameter'];
diff --git a/tests/Fixtures/with-variable.php b/tests/Fixtures/with-variable.php
new file mode 100644
index 0000000000000000000000000000000000000000..f953d678fc84ae9c2b035ca9eefa8298fdec48d6
--- /dev/null
+++ b/tests/Fixtures/with-variable.php
@@ -0,0 +1 @@
+passed variable: <?php echo $custom_variable;
diff --git a/tests/Renderer/TestSimplePhpRenderer.php b/tests/Renderer/TestSimplePhpRenderer.php
index b647beab8f4beebe5e2afdb856e5e9d794e2cdba..1cedb6f6aa96ca54ff2d55dad3f5cdf21e7777c0 100644
--- a/tests/Renderer/TestSimplePhpRenderer.php
+++ b/tests/Renderer/TestSimplePhpRenderer.php
@@ -1,37 +1,68 @@
 <?php
 
-namespace WPDesk\View\Tests;
+namespace WPDesk\View\Tests\Resolver;
 
+use WPDesk\View\Renderer\SimplePhpRenderer;
 use WPDesk\View\Resolver\ChainResolver;
 use WPDesk\View\Resolver\DirResolver;
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 use WPDesk\View\Resolver\NullResolver;
+use WPDesk\View\Tests\TestCase;
 
-class TestSimplePhpRenderer extends \PHPUnit\Framework\TestCase
+class TestSimplePhpRenderer extends TestCase
 {
-    const TEXT_IN_TEMPLATE = 'outputText';
-
-    const TEMPLATE_NAME = 'some_template';
-
-    const TEMPLATE_DIR = '/templates';
-
     public function testThrowsExceptionWhenCannotFindTemplate()
     {
       $this->expectException(CanNotResolve::class);
 
-      $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(''));
+      $renderer = new SimplePhpRenderer(new DirResolver('whatever'));
       $renderer->render('anything');
     }
 
-    public function testRenderWithDirResolver()
-    {
-        $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(__DIR__ . self::TEMPLATE_DIR));
-        $this->assertEquals(self::TEXT_IN_TEMPLATE, $renderer->render(self::TEMPLATE_NAME));
+    /**
+     * @dataProvider templatesWithContent
+     */
+    public function testRenderingTemplates(string $template, string $content, array $parameters): void {
+      $renderer = new SimplePhpRenderer( new DirResolver(self::getTemplatesPath()));
+      $this->assertStringContainsString($content, $renderer->render($template, $parameters));
     }
 
-    public function testCanRenderNestedTemplates(): void
-    {
-        $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(__DIR__ . '/../Fixtures'));
-        $this->assertStringContainsString('This is a content of nested template: Hello World!', $renderer->render('root-template'));
+    /**
+     * @dataProvider templatesWithContent
+     */
+    public function testOutputtingTemplates(string $template, string $content, array $parameters): void {
+      $this->expectOutputString($content);
+      $renderer = new SimplePhpRenderer(new DirResolver(self::getTemplatesPath()));
+      $renderer->output_render($template, $parameters);
+    }
+
+    public function templatesWithContent(): iterable {
+      yield 'simple template' => [
+        'template' => 'simple',
+        'content' => 'outputText',
+        'parameters' => []
+      ];
+
+      yield 'nested template' => [
+        'template' => 'root-template',
+        'content' => "This is a content of nested template: Hello World!\n",
+        'parameters' => []
+      ];
+
+      yield 'access parameters with $param variable' => [
+        'template' => 'with-parameter',
+        'content' => 'passed parameter: custom_parameter',
+        'parameters' => [
+          'custom_parameter' => 'custom_parameter'
+        ]
+      ];
+
+      yield 'access parameters directly through variable' => [
+        'template' => 'with-variable',
+        'content' => 'passed variable: custom_variable',
+        'parameters' => [
+          'custom_variable' => 'custom_variable'
+        ]
+      ];
     }
-}
\ No newline at end of file
+}
diff --git a/tests/Renderer/templates/some_template.php b/tests/Renderer/templates/some_template.php
deleted file mode 100644
index fcd781aa62d0947505006ff55743136fd003c5d2..0000000000000000000000000000000000000000
--- a/tests/Renderer/templates/some_template.php
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php
-    echo 'outputText';
\ No newline at end of file
diff --git a/tests/Resolver/TestChainResolver.php b/tests/Resolver/TestChainResolver.php
index b68c1f954e2056ae42781d29b6f337a9986a8dd7..0a8012e7ed91d603820bf567ea1d3d7bdef891c4 100644
--- a/tests/Resolver/TestChainResolver.php
+++ b/tests/Resolver/TestChainResolver.php
@@ -1,27 +1,18 @@
 <?php
 
-namespace WPDesk\View\Tests;
+namespace WPDesk\View\Tests\Resolver;
 
 use WPDesk\View\Resolver\ChainResolver;
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 use WPDesk\View\Resolver\NullResolver;
+use WPDesk\View\Tests\TestCase;
 
-class TestChainResolver extends \PHPUnit\Framework\TestCase
+class TestChainResolver extends TestCase
 {
     const RESPONSE_OF_RESOLVER = 'response';
 
     const RESOLVE_METHOD_NAME = 'resolve';
 
-    public function setUp(): void
-    {
-        \WP_Mock::setUp();
-    }
-
-    public function tearDown(): void
-    {
-        \WP_Mock::tearDown();
-    }
-
     public function testUseSecondResolverWhenFirstFailed()
     {
         $validResolver = \Mockery::mock(NullResolver::class);
diff --git a/tests/Resolver/TestDirResolver.php b/tests/Resolver/TestDirResolver.php
index 42cfcfaa0047b10ea1a8de27d0ec2e328c8e2782..96e254a879b3d13f799bcb2e4992d5d68c9af5bf 100644
--- a/tests/Resolver/TestDirResolver.php
+++ b/tests/Resolver/TestDirResolver.php
@@ -1,39 +1,35 @@
 <?php
 
-namespace WPDesk\View\Tests;
+namespace WPDesk\View\Tests\Resolver;
 
+use WPDesk\View\Resolver\DirResolver;
 use WPDesk\View\Resolver\Exception\CanNotResolve;
+use WPDesk\View\Tests\TestCase;
 
-class TestDirResolver extends \PHPUnit\Framework\TestCase
-{
-    const TEMPLATE_NAME = 'some_template.php';
-    const TEMPLATE_FILE = 'some_template.php';
-    const TEMPLATE_SUBDIR = 'templates';
+class TestDirResolver extends TestCase {
 
-	public function setUp(): void
-	{
-		\WP_Mock::setUp();
-	}
+	public function testCanFindInDirPath(): void {
+		$resolver = new DirResolver(self::getTemplatesPath());
 
-	public function tearDown(): void
-	{
-		\WP_Mock::tearDown();
+		$this->assertEquals(
+			self::getTemplatesPath() . '/some_template.php',
+			$resolver->resolve('some_template.php'),
+			'Template should be found in dir'
+		);
 	}
 
-    public function testCanFindInDirPath()
-    {
-        $dir = __DIR__ . '/' . self::TEMPLATE_SUBDIR;
-        $resolver           = new \WPDesk\View\Resolver\DirResolver($dir);
+	public function testThrowExceptionWhenCannotFind(): void {
+		$this->expectException(CanNotResolve::class);
 
-        $this->assertStringEndsWith(self::TEMPLATE_FILE, $resolver->resolve(self::TEMPLATE_NAME),
-            'Template should be found in dir');
-    }
+		$resolver = new DirResolver('whatever');
+		$resolver->resolve('whatever2');
+	}
 
-    public function testThrowExceptionWhenCannotFind()
-    {
-        $this->expectException(CanNotResolve::class);
+	public function testResolvingFromCurrentPath(): void {
+		$this->expectException(CanNotResolve::class);
+		$this->expectExceptionMessage('Denying to search in system\'s root path.');
 
-        $resolver = new \WPDesk\View\Resolver\DirResolver('whatever');
-        $resolver->resolve('whatever2');
-    }
-}
\ No newline at end of file
+		$resolver = new DirResolver(null);
+		$resolver->resolve('whatever2');
+	}
+}
diff --git a/tests/Resolver/TestWpThemeResolver.php b/tests/Resolver/TestWpThemeResolver.php
index c3fb0a2f06bb484b681616dc12ecf0e4e0e37d20..b5b06a54d0af9c73ba616474e749c4458c9e5d23 100644
--- a/tests/Resolver/TestWpThemeResolver.php
+++ b/tests/Resolver/TestWpThemeResolver.php
@@ -1,70 +1,53 @@
 <?php
 
-namespace WPDesk\View\Tests;
+namespace WPDesk\View\Tests\Resolver;
 
 use WPDesk\View\Resolver\Exception\CanNotResolve;
+use WPDesk\View\Resolver\WPThemeResolver;
+use WPDesk\View\Tests\TestCase;
 
-class TestThemeResolver extends \PHPUnit\Framework\TestCase
+class TestWpThemeResolver extends TestCase
 {
-    const TEMPLATE_NAME = 'some_template.php';
-    const TEMPLATE_FILE = 'some_template.php';
-    const TEMPLATE_SUBDIR = 'templates';
-
-    public function setUp(): void
-    {
-        \WP_Mock::setUp();
-
-        \WP_Mock::userFunction('locate_template', [
-            'return' => function ($template_names, $load = false, $require_once = true) {
-                $located = '';
-                foreach ((array)$template_names as $template_name) {
-                    if ( ! $template_name) {
-                        continue;
-                    }
-                    if (file_exists(STYLESHEETPATH . '/' . $template_name)) {
-                        $located = STYLESHEETPATH . '/' . $template_name;
-                        break;
-                    }
-                }
-
-                return $located;
-            }
-        ]);
-
-        \WP_Mock::userFunction('trailingslashit', [
-            'return' => function ($string) {
-                return rtrim($string, '/\\') . '/';
-            }
-        ]);
-
-        \WP_Mock::userFunction('untrailingslashit', [
-            'return' => function ($string) {
-                return rtrim($string, '/\\');
-            }
-        ]);
-    }
-
-    public function tearDown(): void
-    {
-        \WP_Mock::tearDown();
-    }
-
-    public function testCanFindInStyleSheetPath()
-    {
-        define('STYLESHEETPATH', __DIR__);
-
-        $template_base_path = self::TEMPLATE_SUBDIR;
-        $resolver           = new \WPDesk\View\Resolver\WPThemeResolver($template_base_path);
-
-        $this->assertStringEndsWith(self::TEMPLATE_FILE, $resolver->resolve(self::TEMPLATE_NAME),
-            'Template should be found in stylesheetpath');
-    }
-
-    public function testThrowExceptionWhenCannotFind()
-    {
-        $this->expectException(CanNotResolve::class);
-
-        $resolver = new \WPDesk\View\Resolver\WPThemeResolver('whatever');
-        $resolver->resolve('whatever2');
-    }
-}
\ No newline at end of file
+	public function setUp(): void
+	{
+		parent::setUp();
+
+		\WP_Mock::userFunction('locate_template', [
+			'return' => function ($template_names, $load = false, $require_once = true) {
+				$located = '';
+				foreach ((array)$template_names as $template_name) {
+					if ( ! $template_name) {
+						continue;
+					}
+					if (file_exists(STYLESHEETPATH . '/' . $template_name)) {
+						$located = STYLESHEETPATH . '/' . $template_name;
+						break;
+					}
+				}
+
+				return $located;
+			}
+		]);
+	}
+
+	public function testCanFindInStyleSheetPath()
+	{
+		define('STYLESHEETPATH', self::getTemplatesPath());
+
+		$resolver = new WPThemeResolver('theme-template');
+
+		$this->assertEquals(
+			self::getTemplatesPath() . '/theme-template/child-template.php',
+			$resolver->resolve('child-template.php'),
+			'Template should be found in stylesheetpath'
+		);
+	}
+
+	public function testThrowExceptionWhenCannotFind()
+	{
+		$this->expectException(CanNotResolve::class);
+
+		$resolver = new WPThemeResolver('whatever');
+		$resolver->resolve('whatever2');
+	}
+}
diff --git a/tests/Resolver/templates/some_template.php b/tests/Resolver/templates/some_template.php
index dd6143c8fc25443943e50fe4b90f5e86d6331a8e..d5dc4cfd49620945fc2533277ca40be6028267ba 100644
--- a/tests/Resolver/templates/some_template.php
+++ b/tests/Resolver/templates/some_template.php
@@ -1 +1 @@
-this is dummy text
\ No newline at end of file
+this is dummy text
diff --git a/tests/TestCase.php b/tests/TestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..8508c0799fdae3da1c96fae338ea37ac989de370
--- /dev/null
+++ b/tests/TestCase.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace WPDesk\View\Tests;
+
+abstract class TestCase extends \PHPUnit\Framework\TestCase {
+
+	public function setUp(): void {
+		\WP_Mock::setUp();
+
+        \WP_Mock::userFunction('trailingslashit', [
+            'return' => function ($string) {
+                return rtrim($string, '/\\') . '/';
+            }
+        ]);
+
+        \WP_Mock::userFunction('untrailingslashit', [
+            'return' => function ($string) {
+                return rtrim($string, '/\\');
+            }
+        ]);
+	}
+
+	public function tearDown(): void {
+		\WP_Mock::tearDown();
+	}
+
+
+	public static function getTemplatesPath(): string {
+		return __DIR__ . '/Fixtures';
+	}
+}
diff --git a/tests/TestPluginViewBuilder.php b/tests/TestPluginViewBuilder.php
index 9b9ea8ccc6cad47cc9c152dab6a86d0a907896b8..b58a4797c73d5027143e4e294dc96a5d6e838ead 100644
--- a/tests/TestPluginViewBuilder.php
+++ b/tests/TestPluginViewBuilder.php
@@ -4,21 +4,7 @@ namespace WPDesk\View\Tests;
 
 use WPDesk\View\PluginViewBuilder;
 
-class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase {
-	public function setUp(): void {
-		\WP_Mock::setUp();
-
-		\WP_Mock::userFunction('trailingslashit', [
-			'return' => function ($string) {
-				return rtrim($string, '/\\') . '/';
-			}
-		]);
-	}
-
-	public function tearDown(): void
-	{
-		\WP_Mock::tearDown();
-	}
+class TestPluginViewBuilder extends TestCase {
 
 	public function testCanRenderUsingDir() {
 		$builder  = new PluginViewBuilder( __DIR__ . '/Fixtures', 'template' );
@@ -27,11 +13,11 @@ class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase {
 		$val     = 'val to render';
 		$args    = [ 'singleArg' => $val ];
 		$content = $renderer->render( 'file', $args );
-		$this->assertRegExp( '/template content/', $content, 'Content from Fixtures/template/file.php should be renderer' );
-		$this->assertRegExp( "/{$val}/", $content, 'Content from Fixtures/template/file.php should contain $val' );
+		$this->assertMatchesRegularExpression( '/template content/', $content, 'Content from Fixtures/template/file.php should be renderer' );
+		$this->assertMatchesRegularExpression( "/{$val}/", $content, 'Content from Fixtures/template/file.php should contain $val' );
 
 		$contentUsingOtherMethod = $builder->loadTemplate( 'file', '.', $args );
 		$this->assertEquals( $content, $contentUsingOtherMethod,
 			'Content should be the same no matter the method of render' );
 	}
-}
\ No newline at end of file
+}