У мене є щось подібне:
public byte[] EncodeMyObject(MyObject obj)
Я проводив тестування одиниць так:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDIT: Запропоновані два способи:
1) Використання твердо кодованих очікуваних значень, як у наведеному вище прикладі.
2) Використання декодера для декодування кодованого байтового масиву та порівняння об'єктів введення / виводу.
Проблема, яку я бачу в методі 1, полягає в тому, що він дуже крихкий і вимагає великої кількості важко кодованих значень.
Проблема методу 2 полягає в тому, що тестування кодера залежить від правильної роботи декодера. Якщо кодер / декодер порушені однаково (там же), тести можуть дати помилкові позитиви.
Це цілком може бути єдиним способом перевірити цей метод. Якщо це так, то добре. Я задаю питання, чи є якісь кращі стратегії для цього виду тестування. Я не можу розкрити внутрішню частину конкретного кодера, над яким я працюю. Я взагалі запитую, як би ви вирішили цю проблему, і я не вважаю, що внутрішні справи важливі. Припустимо, що заданий вхідний об'єкт завжди виробляє один і той же масив вихідних байтів.
myObjectпроходить шляхmyObjectдо{ 0x01, 0x02, 0xFF }? Чи можна розбити та перевірити алгоритм? Причина, про яку я зараз питаю, виглядає так, що у вас є тест, який доводить, що одна магічна річ створює іншу магічну річ. Ваша єдина впевненість у тому, що один вхід видає один вихід. Якщо ви можете розбити алгоритм, ви можете отримати подальшу впевненість в алгоритмі та бути менш покладаючись на магічні входи та виходи.