@@ -79,17 +79,71 @@ public override void CheckValue(object target)
79
79
80
80
if ( ! areEqual )
81
81
{
82
- string message =
82
+ throw new ApplicationException ( GetInequalityComparisonMessage ( actual ) ) ;
83
+ }
84
+ }
85
+
86
+ private string GetInequalityComparisonMessage ( object actual )
87
+ {
88
+ string message ;
89
+
90
+ string actualToPrint = actual . ToString ( ) ;
91
+ string actualTypeToPrint = PropertyAccessor . PropertyType . FullName ;
92
+
93
+ string valueToPrint = Value != null ? Value . ToString ( ) : "(null)" ;
94
+ string valueTypeToPrint = Value != null ? Value . GetType ( ) . FullName : "(null)" ;
95
+
96
+ if ( actualToPrint != valueToPrint && actualTypeToPrint != valueTypeToPrint )
97
+ {
98
+ message =
83
99
String . Format (
84
100
"For property '{0}' expected '{1}' of type '{2}' but got '{3}' of type '{4}'" ,
85
101
PropertyAccessor . Name ,
86
- ( Value != null ? Value . ToString ( ) : "(null)" ) ,
87
- ( Value != null ? Value . GetType ( ) . FullName : "(null)" ) ,
88
- actual ,
89
- PropertyAccessor . PropertyType . FullName ) ;
90
-
91
- throw new ApplicationException ( message ) ;
102
+ valueToPrint ,
103
+ valueTypeToPrint ,
104
+ actualToPrint ,
105
+ actualTypeToPrint ) ;
92
106
}
107
+ else if ( actualToPrint != valueToPrint )
108
+ {
109
+ message =
110
+ String . Format (
111
+ "For property '{0}' of type '{1}' expected '{2}' but got '{3}'" ,
112
+ PropertyAccessor . Name ,
113
+ actualTypeToPrint ,
114
+ valueToPrint ,
115
+ actualToPrint ) ;
116
+ }
117
+ else if ( actualTypeToPrint != valueTypeToPrint )
118
+ {
119
+ message =
120
+ String . Format (
121
+ "For property '{0}' expected type '{1}' but got '{2}'" ,
122
+ PropertyAccessor . Name ,
123
+ valueTypeToPrint ,
124
+ actualTypeToPrint ) ;
125
+ }
126
+ else if ( actualTypeToPrint != actualToPrint )
127
+ {
128
+ message =
129
+ String . Format (
130
+ "For property '{0}' expected same element, but got different element with the same value '{1}' of type '{2}'."
131
+ + Environment . NewLine + "Tip: use a CustomEqualityComparer when creating the PersistenceSpecification object." ,
132
+ PropertyAccessor . Name ,
133
+ actualToPrint ,
134
+ actualTypeToPrint ) ;
135
+ }
136
+ else
137
+ {
138
+ message =
139
+ String . Format (
140
+ "For property '{0}' expected same element, but got different element of type '{1}'."
141
+ + Environment . NewLine + "Tip: override ToString() on the type to find out the difference." ,
142
+ PropertyAccessor . Name ,
143
+ actualTypeToPrint ) ;
144
+ }
145
+
146
+ return message ;
93
147
}
94
148
}
95
149
}
0 commit comments