2017-12-05 7 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; 

     } 

上記のコードは、ユーザーイメージのデータベースにファイルをアップロードするためのコードです。私はコードが意図したとおりに動作するように、ヌル値ではなくGUIDを返すことができる単体テストを書く方法を知る必要があります。ASP.NETは現在ログインしているユーザーの取得をテストしています。ユーザーID

基本的には、アップロードされた画像だけでなく、メンバーシップ・プロバイダから現在ログインしているユーザーのユーザーIDをデータベースに追加して、後で簡単に取得できるようにしたいと考えています。私はuniqueidentifierとtempのuseridを挿入するコード以外のものを受け入れるようにデータベースを修正することによってそれをテストすると、挿入が機能します。しかし、今私は実際にログインしているユーザーIDを取得してデータベースに追加できることを確認したい。私はこのコードをテストする場合

、それはエラーのために言う

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

部分は、私は、会員テーブルにユーザーを追加する場合でも、null値を返していること。 現在ログインしているユーザーのユーザーIDの取得を適切にテストするにはどうすればよいですか?

+0

、その後、多分あなたは、コードをテストしているどこからの認証の問題はありますか?匿名であなたのテストからこのメソッドにアクセスしているのでしょうか? –

+0

これはセメスタープロジェクトで、データベースはローカルデータベースです。プロダクションサーバーはありません。つまり、少なくとも私の限られた理解では、私は実際にユーザーがいないので、テーブルのデフォルト値であるので、テーブルがnullを返すことがわかります。私のテストはすべてIIS上でローカルに行われています。私は、これを適切に単体テストする方法があると信じています。私はこれを作成しているVSを直接テストしていますが、ユーザーを作成してイメージをアップロードしても(テーブルが作成されていても)nullが返されます。 –

+0

また、私はそれがローカルでテストしているという事実によると思います。このコースや以前のコースでは、実際にデバッグや単体テストのことを学んだことはありませんでしたが、これを行うことができます。前述のように、メンバーシップ・プロバイダのuseridのデフォルト・データ型であるため、uniqueidentifierではなくintデータ型を許可するように表を変更すると、このコードは意図したとおりに実行されます。それは私が必要とする成績を得ることができません。それは、正規メンバーシッププロバイダの下で動作する必要があるため、ユーザーIDはデータ型uniqueidentiferである必要があります。私は単体テストを検索できるかどうかを見たいだけです。 –

答えて

1

これ以上の掘り下げと調査の後、これをstackoverflowで見つけました。再びプロ、笑ではなく、どのような適切なキーワードを使用するのか知りませんでしたが、私はこれを見つけました。これは、私が探していたもの、ユーザーのためのguidを模擬するための単体テスト方法です。 Membership.GetUser()がnullの場合

Mocking Guid.NewGuid()

関連する問題