将有一个几何形状类实现看起来是这样的:如何将Geometry.Parse的几何结果与Geometry.Empty进行比较?
private readonly IShapeModel _shape;
public Shape(IShapeModel shape) : base(shape)
{
_shape = shape;
}
/// <summary>
/// Specific geometry data of the shape
/// </summary>
public string GeometryData => _shape.GeometryData;
/// <summary>
/// Returns the <see cref="Geometry"/> for this shape
/// </summary>
public Geometry Geometry => Geometry.Parse(GeometryData);
正如你可以看到我提供了一个模型的形状,并使其返回几何对象与几何提供的标准解析方法。
该代码完美工作,并在未设置GeometryData时返回空几何。
现在我想这样的事情来测试它:
[TestMethod]
public void AccessGeometryPropertyWithNoGeometryDataSetShouldReturnEmpty()
{
var shape = new TestShapeModel {GeometryData = null};
_shapeViewModel = new Shape(shape);
var expected = Geometry.Empty;
var actual = _shapeViewModel.Geometry;
Assert.AreEqual(expected, actual);
}
虽然问题是Geometry.Empty似乎返回一个新的实例,它是不等于解析的实例的结果。
尽管两个对象都是相同的。我得到这个结果: 附加信息:Assert.AreEqual失败。预计:<>。实际:<>。
当我想出了这一点:
[TestMethod]
public void AccessGeometryPropertyWithNoGeometryDataSetShouldReturnEmpty()
{
var shape = new TestShapeModel {GeometryData = null};
_shapeViewModel = new Shape(shape);
Assert.IsTrue(IsEmptyGeometry(_shapeViewModel.Geometry));
}
/// <summary>
/// Check if Geometry is empty by comparing Empty Bounds.
/// </summary>
private static bool IsEmptyGeometry(Geometry geometry)
{
var result = false;
var expected = Geometry.Empty;
if (geometry != null)
{
result = (geometry.Bounds == expected.Bounds);
}
return result;
}
是否有更好的方法来解决这个问题?我希望框架中的某些东西能够与Geometry.Empty进行比较,而不必重写Equals或者实现上面的代码。
['Geometry.IsEmpty()'](https://msdn.microsoft.com /en-us/library/system.windows.media.geometry.isempty(v=vs.110).aspx)? –