TDD estan molt bé però...
Doncs com ja heu vist (si és que algú segueix el meu bloc, clar ;)) que estic intentant aprendre a programar decentment. I intente, per això, gastar TDDs. Però de vegades em planteja més problemes propis del sistema de test, que si no els gastara.
L'exemple que m'ha fet "pedre" unes quantes hores, és amb el nunit de Visual Studio, fent un test d'una classe em C# de Windows Phone Class Library (target 7.1 SDK, no sé si això és rellevant però pense que no). En resum, el test seria algo així:
[TestMethod]
public void testAutenticadorLogin()
{
Autenticador au = new Autenticador("http://localhost", 800, "test", "test");
au.login();
}
Què simplement intenta autenticar mitjançant un webservice instal·lat en localhost, l'usuari test i la contrassenya test.
Doncs sempre que intentava llançar el test em traia una excepció d'arxiu no trobat. Després de diverses proves, inclús funcionant en l'aplicació de mostra però no en el test, descubrisc què el problema està en al fer el login (au.login), per tal d'obrir una url remota (l'accés al webservice) gastem el el component WebClient:
System.Net.WebClient wc = new System.Net.WebClient();
Si comentava eixa línia el programa no fallava al runtime (òbviament no feia l'esperat). Pareix ser què al ser una dependència (System.Net) no la pot trobar el sistema de test (nunit). L'única solució que he trobat després de fer un poc de googling ha segut anar a C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0 (la carpeta on està instal·lat el framwork utilitzat) i copiar tant el .xml com el dll corresponent a System.net a la carpeta debug del projecte de test:
L'exemple que m'ha fet "pedre" unes quantes hores, és amb el nunit de Visual Studio, fent un test d'una classe em C# de Windows Phone Class Library (target 7.1 SDK, no sé si això és rellevant però pense que no). En resum, el test seria algo així:
[TestMethod]
public void testAutenticadorLogin()
{
Autenticador au = new Autenticador("http://localhost", 800, "test", "test");
au.login();
}
Què simplement intenta autenticar mitjançant un webservice instal·lat en localhost, l'usuari test i la contrassenya test.
Doncs sempre que intentava llançar el test em traia una excepció d'arxiu no trobat. Després de diverses proves, inclús funcionant en l'aplicació de mostra però no en el test, descubrisc què el problema està en al fer el login (au.login), per tal d'obrir una url remota (l'accés al webservice) gastem el el component WebClient:
System.Net.WebClient wc = new System.Net.WebClient();
Si comentava eixa línia el programa no fallava al runtime (òbviament no feia l'esperat). Pareix ser què al ser una dependència (System.Net) no la pot trobar el sistema de test (nunit). L'única solució que he trobat després de fer un poc de googling ha segut anar a C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0 (la carpeta on està instal·lat el framwork utilitzat) i copiar tant el .xml com el dll corresponent a System.net a la carpeta debug del projecte de test:
- Anar a la carpeta on està el framework, en el meu cas C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0
- copiar els arxius .dll i .xml que creen la dependència, en el meu cas System.Net.dll i System.Net.xml, a la carpeta debug
- creuar els dits i que funcione ;)
El cas és que ara no llença l'excepció, però he de continuar mirant que passa per què ara a l'intentar descarregar la url (en el callback) dona este missatge:
[net_webclient]\r\nArgumentos: \r\nLas cadenas de recursos de depuración no están disponibles. La clave y los argumentos suelen proporcionar suficiente información para diagnosticar el problema. Vea http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.60310.0&File=System.Net.dll&Key=net_webclient
Ja que, entre altres coses eixa url no existeix ja ;)
I recorde, el problema només està en el framework de test, l'aplicació mòbil funciona "funciona" perfectament.
I recorde, el problema només està en el framework de test, l'aplicació mòbil funciona "funciona" perfectament.
Comentaris
Publica un comentari a l'entrada