Så har jeg næsten været i gang med mit EventServer projekt i en uge. En uge med en selvpålagt begrænsning - Skriv ikke en linie kode før du har skrevet en test. Jeg må indrømme at jeg flere gange har været lige ved at springe fra mit dogme løfte. Der har være flere tests, der har været næsten umulige at lave, men jeg har været tro mod løftet, og jeg synes resultatet bliver godt. Jeg har det klart bedre med den kode jeg sidder med nu, end jeg har haft det med tidligere projekter, efter den første uge.
I går løb jeg dog ind i et problem, som jeg ikke rigtigt kan se nogen løsning på. Jeg arbejder som, tidligere nævnt, på en server, der registrere på en række events. I den forbindelse, har jeg behov for at trigge på events der opstår i en ABB robots controller. ABB har til det udviklet en COM wrapper, som man kan kode imod. Fint - Jeg vil derfor gerne 'Mocke' et RobotData objekt, for at teste min kode (min RobotDataTrigger). Her er så problemet: ABB har mærket alle deres klasser som Sealed, og de har ikke stillet nogen public interfaces til rådighed - Hvordan hulen skal man så teste sin kode?
Nu bruger jeg Rhino Mocks, og de smider selvfølgelig en undtagelse, så snart der forsøges at mocke en sealed klasse. Jeg har ind til videre ikke kunne klare det på anden måde, end ved at opsætte en robot, og connecte til den i den fysiske verden - ikke ligefrem lightweight testing (sådan en dreng koster i området omkring 500.000 dkk, og vejer omkring et ton), og jeg kan heller ikke teste min kode i toget...
Bort set fra dette problem, så har mine oplevelser kun været positive, og jeg anbefaler virkelig, at alle tager den beslutning, og laver solid kode med TFD.
Carry on Testing...
[Test, ExpectedException]
public void ConnectTwiceShouldRaiseException()
{
OpcTrigger trg = new OpcTrigger(server, "Num._R4", 1, null);
trg.Connect();
trg.Connect();
}