2017-12-05 1 views
0
protected void UploadImage_Click(object sender, EventArgs e) 
    { 
     HttpPostedFile postedFile = ImageUploader.PostedFile; 
     string fileExtension = 
Path.GetExtension(Path.GetFileName(postedFile.FileName)); 
     if (ImageUploader.HasFile && fileExtension.ToLower() == ".jpg" || 
fileExtension.ToLower() == ".gif" || fileExtension.ToLower() == ".png")   
     { 

      Stream fs = postedFile.InputStream; 
      BinaryReader br = new BinaryReader(fs); 
      Byte[] image = br.ReadBytes((int)fs.Length); 
      Guid UserId = (Guid)Membership.GetUser().ProviderUserKey; 

      string cs = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(cs)) 
      { 
       string sqlcmd = "insert into ProfileImage values(@UserId, @ImageData)"; 
       SqlCommand cmd = new SqlCommand(sqlcmd, con); 
       cmd.Parameters.AddWithValue("@UserId", UserId); 
       cmd.Parameters.AddWithValue("@ImageData", image); 

       con.Open(); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 

       ErrorLabel.Visible = true; 
       ErrorLabel.Text = "Upload Success!"; 
       ErrorLabel.ForeColor = System.Drawing.Color.Green; 

      } 

     } 
     else 
     { 
      ErrorLabel.Visible = true; 
      ErrorLabel.Text = "Upload failed: Only jpg, gif, and png allowed."; 
      ErrorLabel.ForeColor = System.Drawing.Color.Red; 

     } 

Oben ist der Code, den ich verwende, um eine Datei in die Datenbank für ein Benutzerbild hochzuladen. Ich muss wissen, wie man einen Komponententest schreibt, der eine GUID und nicht einen Nullwert zurückgeben kann, um sicherzustellen, dass der Code wie beabsichtigt funktioniert.ASP.NET testet das Abrufen des aktuell angemeldeten Benutzers. UserId

Im Wesentlichen möchte ich die aktuell angemeldete Benutzer-Benutzer-ID vom Mitgliedschaftsanbieter sowie das hochgeladene Bild in die Datenbank hinzufügen, so dass es später leicht abgerufen werden kann. Wenn ich es teste, indem ich die Datenbank ändere, um etwas anders als die uniqueidentifier und den Code zu akzeptieren, um eine temporäre Benutzer-ID einzufügen, funktioniert die Einfügung. Aber jetzt möchte ich sicherstellen, dass ich die aktuell angemeldete Benutzer-ID tatsächlich erhalten und diese zur Datenbank hinzufügen kann.

Wenn ich diesen Code zu testen, heißt es für den Fehler, dass der

Guid UserId = (Guid)Membership.GetUser().ProviderUserKey 

Teil einen Nullwert zurückkehrt, auch wenn ich einen Benutzer auf die Mitgliedschaft Tabellen hinzuzufügen. Wie kann ich das Abrufen einer aktuell angemeldeten Benutzer-ID richtig testen?

+0

Wenn Membership.GetUser() null ist, dann vielleicht gibt es ein Problem mit der Authentifizierung von wo auch immer Sie den Code zu test? Vielleicht greifen Sie anonym von Ihrem Test auf diese Methode zu? –

+0

Dies ist ein Semesterprojekt, und die Datenbank ist eine lokale Datenbank, es gibt keinen Produktionsserver. Das heißt, ich weiß, zumindest in meinem begrenzten Verständnis, dass, da ich eigentlich keinen Benutzer habe, es Sinn macht, dass die Tabelle null zurückgibt, da dies der Standardwert in der Tabelle ist. Alle meine Tests werden lokal auf dem IIS durchgeführt, und ich glaube, dass es einen Weg gibt, Unit-Test dies richtig zu testen. Ich teste gerade durch VS, wo ich das mache, und selbst wenn ich einen Benutzer erstelle, dann lade Bild hoch (Tabellen gefüllt), gibt immer noch Null zurück. –

+0

Nochmals, ich denke, das liegt daran, dass ich lokal teste. Wir haben in diesen oder früheren Kursen noch nie echte Debugging- oder Unit-Test-Dinge gelernt, aber ich weiß, dass dies möglich ist. Wie bereits erwähnt, wenn ich die Tabelle ändere, um einen int-Datentyp anstelle von uniquentidifer zuzulassen, da dies der Standarddatentyp für Benutzer-ID mit dem Mitgliedschaftsanbieter ist, wird dieser Code wie vorgesehen ausgeführt. Das bringt mir nicht die Note, die ich möchte, da es unter dem regulären Mitgliedschaftsanbieter arbeiten muss, und daher muss die Benutzer-ID vom Datentyp uniqueidentifer sein. Ich möchte nur sehen, ob ich den Abruf dieser Einheit testen kann. –

Antwort

1

Nach mehr graben und forschen, fand dies in stackoverflow. Wieder kein Profi, lol, und wusste nicht einmal, was richtige Keywords zu verwenden, aber ich habe das gefunden, und ich werde es versuchen! Das scheint genau das zu sein, wonach ich gesucht habe, eine Unit-Test-Methode, um eine Guid für einen Benutzer nachzubilden.

Mocking Guid.NewGuid()

Verwandte Themen