Имеют реализацию класса формы геометрии, которая выглядит примерно так:Как сравнить результат геометрии от геометрии. Допустим, с помощью 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)? –