[VS2010/W7x64] Verschil in runtime en unittest

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Ik heb een unit test met de volgende code

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static IList<RegionInfo> GetCountryRegionInfos()
{
IList<RegionInfo> countries =
                     (from region in
                            from culture in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                            select new RegionInfo(culture.LCID)
                       orderby region.TwoLetterISORegionName
                       //Gaat in volgende regel goed in unittest, maar fout @runtime
                       select new RegionInfo(region.TwoLetterISORegionName)).Distinct().ToList();
}

 [TestMethod()]
public void GetCountryCultureInfosTest()
{
            IList<RegionInfo> countries = Util.GetCountryRegionInfos();

            RegionInfo nl = new RegionInfo("NL");
            Assert.IsTrue(countries.Contains(nl));
}

@runtime
public void BuildCombobox()
{
     combobox1.DataSource = Util.GetCountryRegionInfos();
}


Als ik de test uitvoer wordt deze code prima uitgevoerd.
Als ik diezelfde code uitvoer @runtime dan geeft de code terecht aan dat hij van AF (Afghanistan) een specifieke cultuur nodig heeft. Dit kan ik volgen. Nu vraag ik mij af waarom ik deze melding niet krijg in mijn unittest?¿

De oplossing heb ik al, maar ik vraag me af waarom hij niet crasht in de unittest?

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:51

mulder

ik spuug op het trottoir

En als je in je unittest ipv NL AF test?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
mulder schreef op woensdag 27 oktober 2010 @ 11:52:
En als je in je unittest ipv NL AF test?
Dan zal deze inderdaad een exceptie gooien, alleen dan heeft deze bovenstaande functie al aangeroepen. Dit maakt mijn ziens niet uit.

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 14-09 07:13

Haan

dotnetter

Spiral schreef op woensdag 27 oktober 2010 @ 12:12:
[...]


Dan zal deze inderdaad een exceptie gooien, alleen dan heeft deze bovenstaande functie al aangeroepen. Dit maakt mijn ziens niet uit.
Ik kan je niet volgen. Je code werkt niet met AF, maar wel met NL als culture. Dit komt ook terug in je unit test die geen fout geeft bij NL, maar wel bij AF. Je hebt ook al een oplossing, wat is dan het punt? 8)7 Logisch dat je unit test een ander resultaat geeft, als de inhoud van de test anders is dan de praktijksituatie (je unit test is dus niet goed eigenlijk)

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Goed als je mijn SP leest dan staat er dat het fout gaat in de static functie GetCountryRegionInfos().
Dat staat helemaal los van wat er gebeurt in de unittest.

Wijzig ik de unittest in bv.

C#:
1
2
3
4
5
6
7
8
9
10
[TestMethod()] 
public void GetCountryCultureInfosTest() 
{ 
            IList<RegionInfo> countries = Util.GetCountryRegionInfos(); 
            foreach(RegioInfo ri in countries)
            {
                 Console.WriteLine(ri.Displayname);
            }
            Assert.IsTrue(true);
} 


Hoe nutteloos deze bovenstaande unittest is, is niet van belang. Het gaat erom dat de aanroep op de static funtie correct wordt uitgevoerd en geen exceptie gooit, maar juist @runtime wel.

Dat ik de oplossing heb gevonden betekent voor mij niet dat het klaar is. Ik wil graag bovenstaande gedrag begrijpen. Zie bv: [MySQL] Vreemd resultaat bij alleen kolomnaam opgeven

Bijlage met de solution op RapidShare: http://rapidshare.com/files/427419839/RegionInfoTest.zip

[ Voor 5% gewijzigd door Spiral op 27-10-2010 14:00 . Reden: Solution toegevoegd via rapidshare ]

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 13-07 01:53

Korben

() => {};

Ik vermoed dat het wat te maken heeft met de omstandigheden waaronder je die code runt. Als ik namelijk exact dezelfde code run krijg ik geen enkele exceptie.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Korben schreef op woensdag 27 oktober 2010 @ 14:01:
Ik vermoed dat het wat te maken heeft met de omstandigheden waaronder je die code runt. Als ik namelijk exact dezelfde code run krijg ik geen enkele exceptie.
Ok welke Visual Studio gebruik je en op welk OS en welk platform. Tegen welk .NET Framework wordt het gecompileerd?

En wellicht ben ik er, denk ik, achtergekomen waarom dit gebeurt.

Mijn UnitTest project kan in VisualStudio 2010 alleen maar met .NET 4.0 geselecteerd worden.
Het RegionInfoTest project is gemaakt in .NET 3.5.

Dan treed deze fout op. Schakel ik het RegionInfoTest project over naar .NET 4.0 dan treed er geen exceptie op.

Schijnbaar zit er wel verschil in de implementatie van het RegionInfo object t.o.v. .NET 4.0 en .NET 3.5

Zie: http://connect.microsoft....or-test-project-in-vs2010

Dus in 2010 moet je TestProject op .NET 4.0 draaien wat dus niet overeen kan komen met je Solution. Dit kan inderdaad verschillen opleveren tussen runtime en de unittest

[ Voor 47% gewijzigd door Spiral op 27-10-2010 14:17 . Reden: Link toegevoegd van MS Connect ]

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 13-07 01:53

Korben

() => {};

Zoals ik al zei, de omstandigheden waaronder je je code runt. Ikzelf draaide het in een console app in Visual Studio 2010, Windows 7 x64, gecompiled tegen .NET 4.
Dus in 2010 moet je TestProject op .NET 4.0 draaien wat dus niet overeen kan komen met je Solution. Dit kan inderdaad verschillen opleveren tussen runtime en de unittest
Tja. Of je solution in z'n geheel upgraden naar 4.0, of niet met 2010 gaan werken.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?

Pagina: 1