diff --git a/tests/unit/framework/validators/BooleanValidatorTest.php b/tests/unit/framework/validators/BooleanValidatorTest.php
index 655ef58..e3fa3e5 100644
--- a/tests/unit/framework/validators/BooleanValidatorTest.php
+++ b/tests/unit/framework/validators/BooleanValidatorTest.php
@@ -1,5 +1,6 @@
 <?php
 namespace yiiunit\framework\validators;
+
 use yiiunit\framework\validators\FakedValidationModel;
 use yii\validators\BooleanValidator;
 use yiiunit\TestCase;
@@ -31,7 +32,7 @@ class BooleanValidatorTest extends TestCase
 		$this->assertTrue($val->validateValue(true));
 		$this->assertTrue($val->validateValue(false));
 	}
-	
+
 	public function testValidateAttributeAndError()
 	{
 		$obj = new FakedValidationModel;
@@ -41,13 +42,13 @@ class BooleanValidatorTest extends TestCase
 		$obj->attrD = array();
 		$val = new BooleanValidator;
 		$val->validateAttribute($obj, 'attrA');
-		$this->assertFalse(isset($obj->errors['attrA']));
+		$this->assertFalse($obj->hasErrors('attrA'));
 		$val->validateAttribute($obj, 'attrC');
-		$this->assertFalse(isset($obj->errors['attrC']));
+		$this->assertFalse($obj->hasErrors('attrC'));
 		$val->strict = true;
 		$val->validateAttribute($obj, 'attrB');
-		$this->assertFalse(isset($obj->errors['attrB']));
+		$this->assertFalse($obj->hasErrors('attrB'));
 		$val->validateAttribute($obj, 'attrD');
-		$this->assertTrue(isset($obj->errors['attrD']));
+		$this->assertTrue($obj->hasErrors('attrD'));
 	}
 }
diff --git a/tests/unit/framework/validators/CompareValidatorTest.php b/tests/unit/framework/validators/CompareValidatorTest.php
new file mode 100644
index 0000000..c91e7d6
--- /dev/null
+++ b/tests/unit/framework/validators/CompareValidatorTest.php
@@ -0,0 +1,160 @@
+<?php
+namespace yiiunit\framework\validators;
+
+use yii\base\InvalidConfigException;
+use yii\validators\CompareValidator;
+use yiiunit\TestCase;
+
+require_once __DIR__ . '/FakedValidationModel.php';
+
+
+class CompareValidatorTest extends TestCase
+{
+
+	public function testValidateValueException()
+	{
+		$this->setExpectedException('yii\base\InvalidConfigException');
+		$val = new CompareValidator;
+		$val->validateValue('val');
+	}
+
+	public function testValidateValue()
+	{
+		$value = 18449;
+		// default config
+		$val = new CompareValidator(array('compareValue' => $value));
+		$this->assertTrue($val->validateValue($value));
+		$this->assertTrue($val->validateValue((string)$value));
+		$this->assertFalse($val->validateValue($value + 1));
+		foreach ($this->getOperationTestData($value) as $op => $tests) {
+			$val = new CompareValidator(array('compareValue' => $value));
+			$val->operator = $op;
+			foreach ($tests as $test) {
+				$this->assertEquals($test[1], $val->validateValue($test[0]));
+			}
+		}
+	}
+
+	protected function getOperationTestData($value)
+	{
+		return array(
+			'===' => array(
+				array($value, true),
+				array((string)$value, false),
+				array((float)$value, false),
+				array($value + 1, false),
+			),
+			'!=' => array(
+				array($value, false),
+				array((string)$value, false),
+				array((float)$value, false),
+				array($value + 0.00001, true),
+				array(false, true),
+			),
+			'!==' => array(
+				array($value, false),
+				array((string)$value, true),
+				array((float)$value, true),
+				array(false, true),
+			),
+			'>' => array(
+				array($value, false),
+				array($value + 1, true),
+				array($value - 1, false),
+			),
+			'>=' => array(
+				array($value, true),
+				array($value + 1, true),
+				array($value - 1, false),
+			),
+			'<' => array(
+				array($value, false),
+				array($value + 1, false),
+				array($value - 1, true),
+			),
+			'<=' => array(
+				array($value, true),
+				array($value + 1, false),
+				array($value - 1, true),
+			),
+
+		);
+	}
+
+	public function testValidateAttribute()
+	{
+		// invalid-array
+		$val = new CompareValidator;
+		$model = new FakedValidationModel;
+		$model->attr = array('test_val');
+		$val->validateAttribute($model, 'attr');
+		$this->assertTrue($model->hasErrors('attr'));
+		$val = new CompareValidator(array('compareValue' => 'test-string'));
+		$model = new FakedValidationModel;
+		$model->attr_test = 'test-string';
+		$val->validateAttribute($model, 'attr_test');
+		$this->assertFalse($model->hasErrors('attr_test'));
+		$val = new CompareValidator(array('compareAttribute' => 'attr_test_val'));
+		$model = new FakedValidationModel;
+		$model->attr_test = 'test-string';
+		$model->attr_test_val = 'test-string';
+		$val->validateAttribute($model, 'attr_test');
+		$this->assertFalse($model->hasErrors('attr_test'));
+		$this->assertFalse($model->hasErrors('attr_test_val'));
+		$val = new CompareValidator(array('compareAttribute' => 'attr_test_val'));
+		$model = new FakedValidationModel;
+		$model->attr_test = 'test-string';
+		$model->attr_test_val = 'test-string-false';
+		$val->validateAttribute($model, 'attr_test');
+		$this->assertTrue($model->hasErrors('attr_test'));
+		$this->assertFalse($model->hasErrors('attr_test_val'));
+		// assume: _repeat
+		$val = new CompareValidator;
+		$model = new FakedValidationModel;
+		$model->attr_test = 'test-string';
+		$model->attr_test_repeat = 'test-string';
+		$val->validateAttribute($model, 'attr_test');
+		$this->assertFalse($model->hasErrors('attr_test'));
+		$this->assertFalse($model->hasErrors('attr_test_repeat'));
+		$val = new CompareValidator;
+		$model = new FakedValidationModel;
+		$model->attr_test = 'test-string';
+		$model->attr_test_repeat = 'test-string2';
+		$val->validateAttribute($model, 'attr_test');
+		$this->assertTrue($model->hasErrors('attr_test'));
+		$this->assertFalse($model->hasErrors('attr_test_repeat'));
+	}
+
+	public function testValidateAttributeOperators()
+	{
+		$value = 55;
+		foreach ($this->getOperationTestData($value) as $operator => $tests) {
+			$val = new CompareValidator(array('operator' => $operator, 'compareValue' => $value));
+			foreach ($tests as $test) {
+				$model = new FakedValidationModel;
+				$model->attr_test = $test[0];
+				$val->validateAttribute($model, 'attr_test');
+				$this->assertEquals($test[1], !$model->hasErrors('attr_test'));
+			}
+
+		}
+	}
+
+	public function testEnsureMessageSetOnInit()
+	{
+		foreach ($this->getOperationTestData(1337) as $operator => $tests) {
+			$val = new CompareValidator(array('operator' => $operator));
+			$this->assertTrue(strlen($val->message) > 1);
+		}
+		try {
+			$val = new CompareValidator(array('operator' => '<>'));
+		} catch (InvalidConfigException $e) {
+			return;
+		}
+		catch (\Exception $e) {
+			$this->fail('InvalidConfigException expected' . get_class($e) . 'received');
+			return;
+		}
+		$this->fail('InvalidConfigException expected none received');
+	}
+}
\ No newline at end of file
diff --git a/tests/unit/framework/validators/FakedValidationModel.php b/tests/unit/framework/validators/FakedValidationModel.php
index 89632c7..15a2a94 100644
--- a/tests/unit/framework/validators/FakedValidationModel.php
+++ b/tests/unit/framework/validators/FakedValidationModel.php
@@ -2,24 +2,30 @@
 
 namespace yiiunit\framework\validators;
 
+use yii\base\Model;
+
 /**
  * @codeCoverageIgnore
  */
-class FakedValidationModel
+class FakedValidationModel extends Model
 {
-	public $errors = array();
-	public function getAttributeLabel($attr)
-	{
-		return 'Attr-Label: '.$attr;
-	}
-	
-	public function addError($attribute, $message)
+	private $attr = array();
+
+	public function __get($name)
 	{
-		$this->errors[$attribute] = $message;
+		if (stripos($name, 'attr') === 0) {
+			return isset($this->attr[$name]) ? $this->attr[$name] : null;
+		}
+
+		return parent::__get($name);
 	}
-	
-	public function resetErrors()
+
+	public function __set($name, $value)
 	{
-		$this->errors = array();
+		if (stripos($name, 'attr') === 0) {
+			$this->attr[$name] = $value;
+		} else {
+			parent::__set($name, $value);
+		}
 	}
 }
\ No newline at end of file
diff --git a/tests/unit/framework/validators/UrlValidatorTest.php b/tests/unit/framework/validators/UrlValidatorTest.php
index 81ddf41..f585590 100644
--- a/tests/unit/framework/validators/UrlValidatorTest.php
+++ b/tests/unit/framework/validators/UrlValidatorTest.php
@@ -70,20 +70,20 @@ class UrlValidatorTest extends TestCase
 	public function testValidateAttributeAndError()
 	{
 		$obj = new FakedValidationModel;
-		$obj->url = 'http://google.de';
+		$obj->attr_url = 'http://google.de';
 		$val = new UrlValidator;
-		$val->validateAttribute($obj, 'url');
-		$this->assertFalse(isset($obj->errors['url']));
-		$this->assertSame('http://google.de', $obj->url);
-		$obj->resetErrors();
+		$val->validateAttribute($obj, 'attr_url');
+		$this->assertFalse($obj->hasErrors('attr_url'));
+		$this->assertSame('http://google.de', $obj->attr_url);
+		$obj = new FakedValidationModel;
 		$val->defaultScheme = 'http';
-		$obj->url = 'google.de';
-		$val->validateAttribute($obj, 'url');
-		$this->assertFalse(isset($obj->errors['url']));
-		$this->assertTrue(stripos($obj->url, 'http') !== false);
-		$obj->resetErrors();
-		$obj->url = 'gttp;/invalid string';
-		$val->validateAttribute($obj, 'url');
-		$this->assertTrue(isset($obj->errors['url']));
+		$obj->attr_url = 'google.de';
+		$val->validateAttribute($obj, 'attr_url');
+		$this->assertFalse($obj->hasErrors('attr_url'));
+		$this->assertTrue(stripos($obj->attr_url, 'http') !== false);
+		$obj = new FakedValidationModel;
+		$obj->attr_url = 'gttp;/invalid string';
+		$val->validateAttribute($obj, 'attr_url');
+		$this->assertTrue($obj->hasErrors('attr_url'));
 	}
 }