Mamy błąd do naprawienia, i jak każdy dobry praktyk TDD, chcę napisać test awarii, aby najpierw przedstawić błąd. Błąd jest w metodzie, która przyjmuje raczej złożony typ jako dane wejściowe. Błąd będzie odtwarzany tylko wtedy, gdy typ złożony ma określoną kombinację ustawionych wartości właściwości.Wizualizator Debuggera do generowania kodu inicjalizatora obiektów
Do tej pory powieliłem błąd i, w debugerze, można wyświetlić wartość czasu wykonywania złożonego typu. Teraz muszę utworzyć ten złożony typ w sekcji "Rozmieść" w moim teście jednostki, aby móc go podać do metody buggy w sekcji "Akt" testu jednostkowego.
mogę napisać wielki blok kodu obiektu initializer, ręcznie, takie jak na następujący:
var cats =
new List<Cat>
{
new Cat {Name = "Sylvester", Age = 8},
new Cat {Name = "Whiskers", Age = 2}
};
lub nawet coś takiego:
var cats = new List<Cat>();
var cat1 = new Cat();
cat1.Name = "Sylvester";
cat1.Age = 8;
cats.Add(cat1);
var cat2 = new Cat();
cat2.Name = "Whiskers";
cat2.Age = 2;
cats.Add(cat2);
nic nadzwyczajnego tam. Jedynym problemem jest część "odręczna" - złożony typ w moim przypadku nie jest tak banalny jak powyższy przykład.
Mogę również wyświetlać obiekt w debugerze z dowolnym wbudowanym wizualizerem debuggera. Pomyślałem więc, że napiszę niestandardowy wizualizator Debuggera, który wygeneruje dla mnie kod inicjalizacji obiektu. Aby go użyć, chciałbym odtworzyć problem w debugerze, wyświetlić okno QuickWatch i wybrać mój własny wizualizator.
Inną opcją byłoby napisanie niestandardowej implementacji serializacji, która "serializuje" blok kodu inicjalizacji obiektu. Używanie tego byłoby nieco trudniejsze niż tylko podciągnięcie okna QuickWatch, ale może to zadziałać.
Zanim sam sobie poradzę z tym problemem, ktoś zrobił coś takiego? Umysł udostępniający fragment kodu? Czy ktoś mógłby zaproponować inne podejście?
P.S. W moim przypadku typ obiektu jest podklasą abstrakcyjnej klasy bazowej. Chciałem tylko o tym wspomnieć.
Wiem, że to pytanie zostało zadane z powrotem, ale odpowiadam tylko dlatego, że mogę. Zaimplementowałem to tylko na własny użytek. Szczegóły na http://mrvshah.wordpress.com/2011/10/06/debug-visualizer-convert-an-object-to-code/ Kod źródłowy na https://github.com/mrvshah/CreateCodeDebugVisalizer –