Toon posts:

[.NET] Unit testing

Pagina: 1
Acties:

Verwijderd

Topicstarter
Programmeer experts,

Ik ben bezig met NUnit, een unit testing tool voor .NET. Op zich ben ik hier vrij happy mee, maar omdat ik nieuw ben op het gebied van Unit testing loop ik tegen een probleem.

"Gewone" functies die wat doen en retourneren passen perfect in mijn testcase. Functies die database mutaties uitvoeren en afhankelijk daarvan iets doen waren al wat lastiger, maar dat heb ik opgelost door een testdatabase.

Nu heb ik in een ASP.NET applicatie echter een hoop functies die gebruik maken van gegevens uit het session object. Die is er in mijn unit testing case niet. Ik vraag mij dan ook even af hoe ik dit soort dingen in de unit testing op zou kunnen nemen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Je kan eens kijken of http://nunitasp.sourceforge.net/ hier wel mee overweg kan. Anders moet je met #IF's gaan werken of NullObjects introduceren van Fowler gebruiken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik ben niet thuis in .NET maar wel in unit testing. Wat ik doe met dit soort 'complexe' objecten is vaak een dummy object introduceren (die uiteraaard aan een bepaalde interface voldoet), maar waarvan ik het gedrag 100% kan aansturen. Misschien dat je ook zo`n dummy object kan introduceren? En misschien dat er ook al een kant en klare api voor dat session object? Bij java heb je er de wereld, dus ik denk dat er voor C# ook genoeg moeten zijn.

[edit]
Voor java maak ik voor het unit testen gebruik van een inmemory database die volledig te configureren is via een aantal script- en configuratiebestanden. Is er voor .NET niet zo klein inmemory databeestje?

[ Voor 21% gewijzigd door Alarmnummer op 20-02-2004 10:39 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

gorgi_19
NullObjects introduceren van Fowler gebruiken.
NullObjecten zijn handig als je niet op null wilt checken maar altijd een object tot je beschikking wilt hebben. Ik zie niet in hoe deze voor zijn probleem nuttig kunnen zijn.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Alarmnummer schreef op 20 februari 2004 @ 10:40:
[...]


NullObjecten zijn handig als je niet op null wilt checken maar altijd een object tot je beschikking wilt hebben. Ik zie niet in hoe deze voor zijn probleem nuttig kunnen zijn.
Het lijkt mij dat de applicatie vast gaat lopen op de web-specifieke dingen; Httpcontext.Current is een voorbeeld, System.Web.Caching en ook Session. Op niet-webform omgeving geven deze een null terug, waardoor je niet kan unittesten.

Om deze reden wil je niet een eindeloze check inbouwen op null values. Dit is wat ik begrepen had van deze methodiek.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik heb me niet helemaal goed uitgedrukt met die null-object. Het gaat niet zozeer om die null-check, maar om het feit dat een null waarde een speciale betekenis heeft. En deze betekenis verplaats je naar het NullObject.

Ik ben verder niet goed genoeg thuis in .NET om uit te kunnen zeggen over de objecten die terug gestuurd worden. Maar hoe wil jij er voor zorgen dat jij een NullObject terug gestuurd gaat worden op het moment dat je dus aan het testen bent (ipv echt draaien). Heb je daar controle over?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Alarmnummer schreef op 20 februari 2004 @ 10:54:
Ik heb me niet helemaal goed uitgedrukt met die null-object. Het gaat niet zozeer om die null-check, maar om het feit dat een null waarde een speciale betekenis heeft. En deze betekenis verplaats je naar het NullObject.

Ik ben verder niet goed genoeg thuis in .NET om uit te kunnen zeggen over de objecten die terug gestuurd worden. Maar hoe wil jij er voor zorgen dat jij een NullObject terug gestuurd gaat worden op het moment dat je dus aan het testen bent (ipv echt draaien). Heb je daar controle over?
In het nullobject zelf kan 'marks' achterlaten, zodat je weet dat je met een nullobject te maken hebt. Zo kan je bijvoorbeeld in de constructor van je nullobject een Trace uitschrijven en dmv Debug.Writeline (als ik me goed herinner) een 'waarschuwing' geven dat je met een nullobject te maken hebt. Desnoods gooi je een exceptie op door middel van:
Visual Basic .NET:
1
2
3
4
Public Sub New()
#IF RELEASE
     Throw new Exception("Error: Nullobject not allowed in Release Mode")
#End IF

De eerste, met de trace, geeft dan een 'waarschuwing in http://webserver/trace.axd ; hier kan je snel zien wat er in een pagina gebeurd en zie je of je waarschuwingen hebt.

De tweede, met de debug.writeline, geeft een waarschuwing in het venster van NUnit.

Hoe je kan controleren? Je kan er een kleine wrapper omheen maken;
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Class MySessionWrapper

    Public Shared Function GetSession(Key as String) as Object
        
        If HttpContext.Current Is Nothing

            Return New MyNullObject(Key)

        Else

            return Session(Key)

        End if

    End Function
End Class

[ Voor 24% gewijzigd door gorgi_19 op 20-02-2004 11:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1