#Project NURL
##Spécifications
Nurl est un utilitaire en ligne de commande qui permet de voir, télécharger ou afficher des informations à partir d'une url.
L'executable sera nommé nurl.exe
. Il pourra être lancé avec une seule commande à la fois et plusieurs options (comme décrit dans les exemples ci-dessous).
Voici l'ensemble des options disponibles dans l'application:
-
Affiche dans la console le contenu du fichier sité à l'url
abc
:nurl.exe get -url "http://abc"
-
Sauvegarde le contenu de l'url
http://abc
dans le fichierc:\abc.json
:nurl.exe get -url "http://abc" -save "c:\abc.json"
-
Teste le temps de chargement du ficher à l'url
http://abc
5 fois et affiche les 5 tempsnurl.exe test -url "http://abc" -times 5
-
Teste le temps de chargement du fichier à l'url
http://abc
et affiche la moyenne du temps de chargementnurl.exe test -url "http://abc" -times 5 -avg
##Tâches
-
Créez un répertoire
Projects\nurl
dans votre repository projet github. -
Transcrivez l'exemple complet sous forme de specifications dans un fichier
specs.txt
. Soit par exemple pour les 2 premières options:Feature: GET In order : to see the content of a web page as a : shell fan I want to download a web page Scenario: show the content of a page Given : I entered a fake url option `-url "http://fake"` And : any other option When : I press enter Then : the result should be `<h1>hello</h1>` Scenario: save the content of a page Given : I entered a fake url option `-url "http://fake"` And : I enter the option `-save` with the value 'fake.txt' When : I press enter Then : a file called `fake.txt` should be created with the content `<h1>hello</h1>`
-
Implémentez votre moteur de traitement en le validant pour chaque fonctionalité par des tests en suivant les scénarios des spécifications. Par exemple:
[Test] public void Should_show_the_content_of_a_page() { //given var command = null //votre implémentation //when var result = command.Show(url); //exemple d'implémentation //then Assert.That(result, Is.EqualTo("<h1>hello</h1>")) }
Cet exemple représente la transcription sous forme de code de votre scenario de test, mais vous devrez -très certainement- avoir des tests unitaires intermédiaires.
Faites un commit pour chaque Feature quand test/implémentation sont passés au vert.
-
Faites des recherches sur la meilleure manière d'effectuer le traitement des arguments et prennez la librairie qui vous convient (ou passez vous d'une librairie et faites le à la main)
-
Implémentez votre application en prennant en compte les arguments de la ligne de commande et branchez le tout avec votre moteur applicatif
-
Regardez/recherchez comment télécharger du contenu web et implémentez cela dans votre moteur.
- Pensez à découpler au maximum pour pouvoir tout tester
- Ne soyez pas choqués par avoir l'impression de coder cela dans le sens inverse auquel vous êtes habitués.
- testez finalement avec une vrai url mais uniquement à la fin
- pas de commit, pas de note de participation
- pensez à bien commencer par implémenter votre coeur applicatif, la partie du code qui va effectivement aller faire une requete n'arrive qu'à la fin, de même que la partie qui gère les inputs.
- l'historique de vos commits sera regargé pour voir comment vous avez construit votre code.
Note: exemple d'url de test avec du vrai contenu : http://api.openweathermap.org/data/2.5/weather?q=paris&units=metric