equatable v0.4.0 (#28)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 47f104c..b0801f4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.4.0
+
+Update `toString` to default to `runtimeType` ([#27](https://github.com/felangel/equatable/issues/27))
+
 # 0.3.0
 
 Enforce Immutability ([#25](https://github.com/felangel/equatable/issues/25))
diff --git a/lib/src/equatable.dart b/lib/src/equatable.dart
index 91cbca6..e00588b 100644
--- a/lib/src/equatable.dart
+++ b/lib/src/equatable.dart
@@ -27,4 +27,7 @@
 
   @override
   int get hashCode => runtimeType.hashCode ^ mapPropsToHashCode(props);
+
+  @override
+  String toString() => '$runtimeType';
 }
diff --git a/lib/src/equatable_mixin.dart b/lib/src/equatable_mixin.dart
index dc62c9c..fac729f 100644
--- a/lib/src/equatable_mixin.dart
+++ b/lib/src/equatable_mixin.dart
@@ -26,4 +26,7 @@
 
   @override
   int get hashCode => runtimeType.hashCode ^ mapPropsToHashCode(props);
+
+  @override
+  String toString() => '$runtimeType';
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index c655cc9..b89d507 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: equatable
 description: An abstract class that helps to implement equality without needing to explicitly override == and hashCode.
-version: 0.3.0
+version: 0.4.0
 author: Felix Angelov <felangelov@gmail.com>
 homepage: https://github.com/felangel/equatable
 
diff --git a/test/equatable_mixin_test.dart b/test/equatable_mixin_test.dart
index 0024883..7e85afd 100644
--- a/test/equatable_mixin_test.dart
+++ b/test/equatable_mixin_test.dart
@@ -89,7 +89,7 @@
   group('Empty Equatable', () {
     test('should correct toString', () {
       final instance = EmptyEquatable();
-      expect(instance.toString(), "Instance of 'EmptyEquatable'");
+      expect(instance.toString(), 'EmptyEquatable');
     });
 
     test('should return true when instance is the same', () {
@@ -119,7 +119,7 @@
   group('Simple Equatable (string)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable('simple');
-      expect(instance.toString(), "Instance of 'SimpleEquatable<String>'");
+      expect(instance.toString(), 'SimpleEquatable<String>');
     });
 
     test('should return true when instance is the same', () {
@@ -164,7 +164,7 @@
   group('Simple Equatable (number)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable(0);
-      expect(instance.toString(), "Instance of 'SimpleEquatable<int>'");
+      expect(instance.toString(), 'SimpleEquatable<int>');
     });
 
     test('should return true when instance is the same', () {
@@ -203,7 +203,7 @@
   group('Simple Equatable (bool)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable(true);
-      expect(instance.toString(), "Instance of 'SimpleEquatable<bool>'");
+      expect(instance.toString(), 'SimpleEquatable<bool>');
     });
 
     test('should return true when instance is the same', () {
@@ -245,8 +245,7 @@
         key: 'foo',
         value: 'bar',
       ));
-      expect(
-          instance.toString(), "Instance of 'SimpleEquatable<EquatableData>'");
+      expect(instance.toString(), 'SimpleEquatable<EquatableData>');
     });
     test('should return true when instance is the same', () {
       final instance = SimpleEquatable(EquatableData(
@@ -305,7 +304,7 @@
   group('Multipart Equatable', () {
     test('should correct toString', () {
       final instance = MultipartEquatable("s1", "s2");
-      expect(instance.toString(), "Instance of 'MultipartEquatable<String>'");
+      expect(instance.toString(), 'MultipartEquatable<String>');
     });
     test('should return true when instance is the same', () {
       final instance = MultipartEquatable("s1", "s2");
@@ -354,7 +353,7 @@
         hairColor: Color.black,
         children: ['Bob'],
       );
-      expect(instance.toString(), "Instance of 'ComplexEquatable'");
+      expect(instance.toString(), 'ComplexEquatable');
     });
     test('should return true when instance is the same', () {
       final instance = ComplexEquatable(
@@ -438,7 +437,7 @@
         }
         """,
       ) as Map<String, dynamic>);
-      expect(instance.toString(), "Instance of 'Credentials'");
+      expect(instance.toString(), 'Credentials');
     });
 
     test('should return true when instance is the same', () {
diff --git a/test/equatable_test.dart b/test/equatable_test.dart
index e69bd0e..eee26b5 100644
--- a/test/equatable_test.dart
+++ b/test/equatable_test.dart
@@ -73,7 +73,7 @@
   group('Empty Equatable', () {
     test('should correct toString', () {
       final instance = EmptyEquatable();
-      expect(instance.toString(), "Instance of 'EmptyEquatable'");
+      expect(instance.toString(), 'EmptyEquatable');
     });
 
     test('should return true when instance is the same', () {
@@ -103,7 +103,7 @@
   group('Simple Equatable (string)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable('simple');
-      expect(instance.toString(), "Instance of 'SimpleEquatable<String>'");
+      expect(instance.toString(), 'SimpleEquatable<String>');
     });
 
     test('should return true when instance is the same', () {
@@ -119,6 +119,11 @@
       );
     });
 
+    test('should return correct toString', () {
+      final instance = SimpleEquatable('simple');
+      expect(instance.toString(), 'SimpleEquatable<String>');
+    });
+
     test('should return true when instances are different', () {
       final instanceA = SimpleEquatable('simple');
       final instanceB = SimpleEquatable('simple');
@@ -148,7 +153,7 @@
   group('Simple Equatable (number)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable(0);
-      expect(instance.toString(), "Instance of 'SimpleEquatable<int>'");
+      expect(instance.toString(), 'SimpleEquatable<int>');
     });
 
     test('should return true when instance is the same', () {
@@ -187,7 +192,7 @@
   group('Simple Equatable (bool)', () {
     test('should correct toString', () {
       final instance = SimpleEquatable(true);
-      expect(instance.toString(), "Instance of 'SimpleEquatable<bool>'");
+      expect(instance.toString(), 'SimpleEquatable<bool>');
     });
 
     test('should return true when instance is the same', () {
@@ -229,8 +234,7 @@
         key: 'foo',
         value: 'bar',
       ));
-      expect(
-          instance.toString(), "Instance of 'SimpleEquatable<EquatableData>'");
+      expect(instance.toString(), 'SimpleEquatable<EquatableData>');
     });
     test('should return true when instance is the same', () {
       final instance = SimpleEquatable(EquatableData(
@@ -289,7 +293,7 @@
   group('Multipart Equatable', () {
     test('should correct toString', () {
       final instance = MultipartEquatable("s1", "s2");
-      expect(instance.toString(), "Instance of 'MultipartEquatable<String>'");
+      expect(instance.toString(), 'MultipartEquatable<String>');
     });
     test('should return true when instance is the same', () {
       final instance = MultipartEquatable("s1", "s2");
@@ -338,7 +342,7 @@
         hairColor: Color.black,
         children: ['Bob'],
       );
-      expect(instance.toString(), "Instance of 'ComplexEquatable'");
+      expect(instance.toString(), 'ComplexEquatable');
     });
     test('should return true when instance is the same', () {
       final instance = ComplexEquatable(
@@ -422,7 +426,7 @@
         }
         """,
       ) as Map<String, dynamic>);
-      expect(instance.toString(), "Instance of 'Credentials'");
+      expect(instance.toString(), 'Credentials');
     });
 
     test('should return true when instance is the same', () {