Я пишу Unit Test и размышляю о сценарии типа, который реализует IClonable
. Так что, конечно, я хочу иметь модульное тестирование, которое проверяет метод Clone()
.Единичный тест: клон и равенство
[Test]
public void CloneObject()
{
MyType original = new MyType();
MyType clone = (MyType)original.Clone();
// Assert for equality
}
Так что моя первая задача это иметь Assert
для равенства. Я вижу следующие варианты:
- , проходящие через все свойства (поля)
MyType
и проверить их один на один - переопределение
Equals()
вMyType
, чтобыMyType
сказать, если два экземпляра равны (считают, что иногда равенство для испытаний считается разным для производственного кода) - Проверьте с некоторой сериализацией, если экземпляры равны (для этого сценария
MyType
должно быть[Serializable]
, но иногда это сложно сделать, если оно имеет, например, свойства интерфейса) - ... ??
Для первых двух я могу настроить свои тесты, и они хорошо работают. Но что, если я изменю MyType
и добавлю дополнительную недвижимость? Если Clone()
не копирует это, и я не добавляю его в список проверенных свойств или метод equals, мой тест все равно проходит, даже если свойство не копируется.
Как вы решаете такие испытания?
Рассматривали ли вы Json сериализации (де) или же, которые страдают от одних и тех же ограничений, как бинарная сериализация ('[Serializable]') на ваш взгляд? –