Mam coś takiego:
public byte[] EncodeMyObject(MyObject obj)
Testowałem tak:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDYCJA: Dwa proponowane przeze mnie sposoby to:
1) Używanie zakodowanych oczekiwanych wartości, jak w powyższym przykładzie.
2) Używanie dekodera do dekodowania zakodowanej tablicy bajtów i porównywanie obiektów wejścia / wyjścia.
Problem, który widzę w metodzie 1, polega na tym, że jest ona bardzo krucha i wymaga dużej ilości zakodowanych wartości.
Problem z metodą 2 polega na tym, że testowanie enkodera zależy od prawidłowego działania dekodera. Jeśli koder / dekoder są równo uszkodzone (w tym samym miejscu), testy mogą dać fałszywie dodatnie wyniki.
Mogą to być jedyne sposoby przetestowania tego rodzaju metody. Jeśli tak jest, to dobrze. Zadaję pytanie, aby sprawdzić, czy istnieją lepsze strategie dla tego typu testów. Nie mogę ujawnić wewnętrznych elementów konkretnego enkodera, nad którym pracuję. Pytam ogólnie, jak byś rozwiązał ten problem, i nie uważam, żeby elementy wewnętrzne były ważne. Załóżmy, że dany obiekt wejściowy zawsze wytworzy tę samą wyjściową tablicę bajtów.
myObjectprzejść odmyObjectdo{ 0x01, 0x02, 0xFF }? Czy ten algorytm można rozbić i przetestować? Powód, dla którego obecnie pytam, wygląda na to, że masz test, który dowodzi, że jedna magiczna rzecz wytwarza inną magiczną rzecz. Twoja jedyna pewność polega na tym, że jedno wejście daje jedno wyjście. Jeśli potrafisz złamać algorytm, możesz zyskać dalsze zaufanie do algorytmu i mniej polegać na magicznych wejściach i wyjściach.