У меня есть что-то вроде этого:
public byte[] EncodeMyObject(MyObject obj)
Я был модульное тестирование, как это:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
РЕДАКТИРОВАТЬ: Два способа, которые я видел предложены:
1) Использование ожидаемых значений в жестком коде, как в примере выше.
2) Использование декодера для декодирования закодированного байтового массива и сравнения объектов ввода / вывода.
Проблема, которую я вижу со способом 1, состоит в том, что он очень хрупок и требует много жестко закодированных значений.
Проблема метода 2 заключается в том, что тестирование кодера зависит от правильной работы декодера. Если кодер / декодер сломаны одинаково (в одном и том же месте), то тесты могут дать ложные срабатывания.
Вполне возможно, что это единственный способ проверить этот тип метода. Если это так, то хорошо. Я задаю вопрос, чтобы увидеть, есть ли какие-либо лучшие стратегии для этого типа тестирования. Я не могу раскрыть внутренности конкретного кодера, над которым я работаю. В общем, я спрашиваю, как бы вы решили эту проблему, и я не чувствую, что внутреннее устройство важно. Предположим, что данный входной объект всегда будет производить один и тот же выходной байтовый массив.
myObject
идет отmyObject
к{ 0x01, 0x02, 0xFF }
? Можно ли этот алгоритм сломать и проверить? Причина, по которой я спрашиваю, в настоящее время, похоже, у вас есть тест, который доказывает, что одна магическая вещь производит другую магическую вещь. Ваша единственная уверенность в том, что один вход производит один выход. Если вы можете сломать алгоритм, вы можете получить дополнительную уверенность в алгоритме и меньше полагаться на волшебные входы и выходы.