c# - Fluent Assertions: Approximately compare a classes properties -
i have class vector3d has properties x, y , z of type double (it has other properties such magnitude).
what best way of approximately comparing properties or selection of properties @ given precision using fluent assertions?
currently have been doing this:
calculated.x.should().beapproximately(expected.x, precision); calculated.y.should().beapproximately(expected.y, precision); calculated.z.should().beapproximately(expected.z, precision); is there single line approach achieve same thing? such using shouldbeequivalentto, or require constructing generic extension method allows properties included / excluded?
yes it's possible using shouldbeequivalentto. following code check properties of type double precision of 0.1 :
double precision = 0.1; calculated.shouldbeequivalentto(expected, option => options .using<double>(ctx => ctx.subject.should().beapproximately(ctx.expectation, precision)) .whentypeis<double>()); if want compare x, y , z properties change when constraint :
double precision = 0.1; calculated.shouldbeequivalentto(b, options => options .using<double>(ctx => ctx.subject.should().beapproximately(ctx.expectation, precision)) .when(info => info.selectedmemberpath == "x" || info.selectedmemberpath == "y" || info.selectedmemberpath == "z")); another approach explicitly tell fluentassertions wich properties should compared, it's bit less elegant :
double precision = 0.1; calculated.shouldbeequivalentto(b, options => options .including(info => info.selectedmemberpath == "x" || info.selectedmemberpath == "y" || info.selectedmemberpath == "z") .using<double>(ctx => ctx.subject.should().beapproximately(ctx.expectation, precision)) .when(info => true)); since using statement not return equivalencyassertionoptions<t> need hack calling when statement true expression.
Comments
Post a Comment