Вопрос

От MBUNIT я пытаюсь проверить, являются ли значения двумя объектами одинаковыми, используя

Assert.AreSame(RawDataRow, result);

Однако я получаю следующее неудачное:

Expected Value & Actual Value : {RawDataRow: CentreID = "CentreID1",
CentreLearnerRef = "CentreLearnerRef1",
ContactID = 1, DOB = 2010-05-05T00:00:00.0000000,
Email = "Email1", ErrorCodes = "ErrorCodes1",
ErrorDescription = "ErrorDescription1", FirstName = "FirstName1"}

Примечание. Оба значения выглядят одинаково, когда отформатированы, но они являются различными случаями.

Я не хочу проходить через каждую недвижимость. Могу ли я сделать это от MBUNIT?

Это было полезно?

Решение 3

Я оказался настроить свои собственные отражения

private bool PropertiesEqual<T>(T object1, T object2)
        {
            PropertyDescriptorCollection object2Properties = TypeDescriptor.GetProperties(object1);
            foreach (PropertyDescriptor object1Property in TypeDescriptor.GetProperties(object2))
            {
                PropertyDescriptor object2Property = object2Properties.Find(object1Property.Name, true);

                if (object2Property != null)
                {
                    object object1Value = object1Property.GetValue(object1);
                    object object2Value = object2Property.GetValue(object2);

                    if ((object1Value == null && object2Value != null) || (object1Value != null && object2Value == null))
                    {
                        return false;
                    }

                    if (object1Value != null && object2Value != null)
                    {
                        if (!object1Value.Equals(object2Value))
                        {
                            return false;
                        }
                    }
                }
            }
            return true;
        }

Другие советы

В принципе, Assert.AreEqual использует Object.Equals() проверить равенство между фактическим и ожидаемым экземпляром, в то время как Assert.AreSame использует Object.ReferenceEquals.

Если ваш класс не реализует какой-либо встроенный механизм равенства; Например, путем переопределения Object.Equals, вы окажетесь с проблемой, который вы описываете, потому что MBUNIT Не знает, как сравнить два экземпляра теста типа.

Есть несколько решений. Одним из них является решение Coppermill: вы можете захотеть реализовать структурное равенство для сравнения на основе отражения. Но Мбунит уже встроенный функция такая. Отказ Это называется StructuralEqualityComparer<T> И это очень легко использовать. Так зачем изобретать колесо?

Assert.AreSame(RawDataRow, result, new StructuralEqualityComparer<MyDataRow>
{
   { x => x.CentreID },
   { x => x.CentreLearnerRef, (a, b) => a.Equals(b, StringComparison.OrdinalIgnoreCase) },
   { x => x.ContactID },
   // You can customize completely the comparison process...
});

Во всяком случае, я предлагаю вам прочитать эту статью: http://interfacingreality.blogspot.com/2009/09/eavality-assertions-in-mbunit-v3.html.

Вы также можете прочитать эта статья в галлио вики.

Вы специально ищете Ссылочное равенство? AreSame Тестирование того, что оба ссылки указывают на один и тот же объект. Из дока:

Assert.AreSame - Проверяет, что фактическое значение передается определенному некоторому ожидаемому значению.

Если вы просто хотите сравнить, что два экземпляра объекта логически равны, то AreEqual это то, что вам нужно.

Assert.AreEqual - Проверяет, что фактическое значение равно некоторой ожидаемой стоимости.

В MBUNIT 3 вы можете использовать structuralequalitycomparer:

Assert.areelementsal (OBJ1, OBJ2, новый structuralequalityComparer ());

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top