2017-07-27 1 views
0

J'ai créé des Webjobs Azure qui contiennent des méthodes de création de fichiers et d'ajout de données à ce fichier sur Datalake Store. J'en ai terminé avec toutes ses pages de développement webjobs de publication etc Maintenant, je vais écrire des tests unitaires pour tester si les données que j'envoie est ajouté avec succès au fichier ou pas Tout ce que je dois savoir est de savoir comment effectuer un tel test unitaire idée? Ce que je pensais actuellement de faire, c'est en nettoyant toutes les données de mon fichier datalake et en y envoyant des données de test. donc sur la base de l'une des données de la colonne de l'ensemble des données que j'ai envoyées, je vais vérifier si elle a été ajouté ou non. Existe-t-il un moyen de déterminer rapidement si mes données de test sont écrites ou non?Comment effectuer un test unitaire sur la fonction d'ajout d'Azure Data Lake écrite dans .Net Framework?

Remarque: En fait, je veux savoir comment supprimer une ligne particulière d'un fichier csv sur Data Lake mais je ne veux pas utiliser usql pour rechercher la ligne requise. (Je n'envoie pas directement de données à Datalake il est écrit via la file d'attente du bus de service Azure qui déclenche alors les webjobs pour ajouter des données à un fichier sur datalake.)

Répondre

0

Je résolu mon problème de la manière que je m'y suis la longueur de mon dossier sur la boutique en Datalake utilisant:

var fileoffset = _adlsFileSystemClient.FileSystem.GetFileStatus(_dlAccountName, "/MyFile.csv").FileStatus.Length; 

après avoir obtenu la longueur j'ai envoyé mes données de test au datalake et après que je à nouveau eu la longueur d'un fichier utilisant le même code. de sorte que la première longueur à savoir avant d'envoyer des données d'essai, il a été mon offset et la longueur obtenu après l'envoi de données de test a été ma longueur de destination soit de décalage à la longueur de destination j'ai lu mon fichier datalake en utilisant:

Stream Stream1 = _adlsFileSystemClient.FileSystem.Open(_dlAccountName, "/MyFile.csv", totalfileLength, fileoffset); 

Après avoir obtenu mes données Dans un flux j'ai essayé de rechercher les données de test que j'ai envoyées en utilisant le code suivant:

Note: J'avais une colonne de guids dans le fichier sur la base de laquelle je recherche mon guid dans un flux de fichiers. assurez-vous de convertir vos données de recherche en octets, puis passez-le à la fonction ReadOneSrch (..).

static bool ReadOneSrch(Stream fileStream, byte[] mydata) 
    { 
     int b; 
     long i = 0; 
     while ((b = fileStream.ReadByte()) != -1) 
     { 
      if (b == mydata[i++]) 
      { 

       if (i == mydata.Length) 
        return true; 

      } 
      else 
       i = b == mydata[0] ? 1 : 0; 
     } 

     return false; 
    } 
0

En plus de regarder le fichier, je peux voir peu d'autres choix. Si seul votre test unitaire est en cours d'écriture dans le fichier, vous pouvez envoyer des ajouts de longueurs variables, puis vérifier si la taille du fichier est correctement mise à jour suite aux ajouts réussis. Vous pouvez toujours lire le fichier et voir si vos données le font aussi bien.

+0

Ouais, vous avez raison je pensais aussi qu'il :) –

+0

Mais @Amit il y a un problème du fichier dans lequel nous apposent des données est essentiellement créé par webjobs à un moment plusieurs utilisateurs enverraient données afin Si mon test se déroule en production, nous ne pouvons plus considérer cette taille comme un paramètre de mesure. –

+0

Oui, si vous voulez tester en production où d'autres acteurs sont ajoutés au fichier, vous ne pouvez pas compter sur la longueur. Voici une manière optimale. (1) interroger la longueur du fichier (2) envoyer ajouter et attendre l'heure stipulée (3) lire de nouvelles données, c'est-à-dire à partir du décalage, pour voir si vos données l'ont réellement fait dans le fichier. De cette façon, vous ne lisez qu'une partie du fichier. –