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은 현재 로그인 한 사용자의 검색을 테스트합니다. UserId
본질적으로, 나중에 쉽게 검색 할 수 있도록 업로드 된 이미지뿐만 아니라 멤버 자격 공급자의 현재 로그인 한 사용자 아이디를 데이터베이스에 추가하려고합니다. uniqueidentifier와 temp userid를 삽입하는 코드 이외의 것을 받아들이도록 데이터베이스를 수정하여 테스트하면 삽입이 작동합니다. 그러나 이제는 현재 로그인 한 사용자 ID를 실제로 획득하여 데이터베이스에 추가 할 수 있는지 확인하려고합니다. 이 코드를 테스트 할 때
, 그것은
Guid UserId = (Guid)Membership.GetUser().ProviderUserKey
부분은 내가 회원 테이블에 사용자를 추가하는 경우에도, null 값을 반환하는 오류에 대해 말한다. 현재 로그인 한 사용자 아이디의 검색을 제대로 테스트하려면 어떻게해야합니까?
, 어쩌면 당신이 코드를 테스트하는 곳에서 인증에 문제가 있습니까? 익명으로 테스트에서이 방법에 액세스하고 있습니까? –
이것은 학기 프로젝트이며 데이터베이스가 로컬 db이고 프로덕션 서버가 없습니다. 즉, 적어도 제한된 이해에서는 실제로 사용자가 없으므로 테이블의 기본값 인 null이 테이블을 반환한다는 것을 알 수 있습니다. 내 모든 테스트는 IIS에서 로컬로 수행되며, 제대로 테스트 할 수있는 방법이 있다고 생각합니다. 나는 VS를 통해 곧바로 이것을 테스트하고 있는데, 심지어 사용자를 생성 한 후에도 업로드 된 이미지 (테이블이 채워짐)는 여전히 null을 반환합니다. –
다시 말하지만, 나는 로컬에서 테스트 중이라는 사실 때문이라고 생각합니다. 이 코스 나 이전 코스에서 실제 디버깅이나 유닛 테스트를 배운 적이 없지만 이것이 가능하다는 것을 알고 있습니다. 언급 한 바와 같이, uniqueidentifer 대신 int 데이터 형식을 허용하도록 테이블을 변경하면 멤버 자격 공급자가있는 userid의 기본 데이터 형식이므로 의도 한대로이 코드가 실행됩니다. 그게 나에게 내가 원하는 학년을 얻지 못할 것이다. 왜냐하면 그것은 정규 멤버십 제공자 아래에서 일해야하기 때문에, 사용자 ID는 데이터 유형 uniqueidentifer 일 필요가있다. 나는 이것의 검색을 단위 테스트 할 수 있는지보고 싶다. –