ทำ Unit Test สำหรับ SharePoint 2010

Submitted by ezybzy on Thu, 2012-02-16 - 20:44

มีโครงการกับทีมงานที่ที่ทำงานว่าเราจะพัฒนาซอฟท์แวร์โดยนำแนวทาง Test Driven Development มาใช้ กล่าวง่าย ๆ คือการเขียน Test ก่อนการพัฒนา ซึ่งนั่นก็แน่นอนว่าเราต้องทำ Class กันเข้มข้นพอสมควร ขั้นตอนก่อนจะเริ่มกระบวนการนี้เราคงต้องมาทบทวนกันว่าใน Visual Studio 2010 นั้นมีกระบวนการใดบ้างที่จะทำ Unit Test กับโปรเจคที่ทำงานกับ SharePoint 2010

มาดูสภาวะแวดล้อมกันก่อน เครื่องที่ผมใช้จัดกระบวนการนี้เป็น Windows 7 (x64) Enterprise Edition SP1 ติดตั้ง SharePoint Foundation 2010 SP1 และ Visual Studio 2010 Ultimate SP1

สิ่งแรกที่ได้ทำคือ เราต้องทำการสร้าง Empty SharePoint Solution ขึ้นมา 1 อัน เพราะเราต้องการจะสร้าง Class Library ที่มีการอ้างอิงเกี่ยวกับไลบารี่ของ SharePoint ให้เรียบร้อย หลังจากนั้นก็ทำการสร้าง Test Project เพิ่มเข้าไปใน Solution เดิมของเรา

ขั้นนี้ปัญหาข้อแรกที่พบคือ SharePoint Project ของเราจะใช้งาน .NET Framework 3.5 แต่ Test Project ใช้งาน .NET Framework 4 ซึ่งไม่ง่ายเลยที่จะปรับให้ Framework ตรงกัน แต่เมื่อตามลิงค์ที่อยู่ตอนท้ายของหน้าต่างแจ้งปัญหานั้น (แหมจะทำให้มันกดลิงค์ง่าย ๆ หน่อยก็ไม่ได้นะ Microsoft) ดังนี้ Possible Additional Steps to Enable Re-targeting of Test Projects to .NET Framework 3.5 ซึ่งบอกให้ทำการแก้ไข devenv.exe.config ซึ่งก็เหมือนจะผ่านไปได้ด้วยดี เราก็สามารถเปลี่ยน Test Project ให้มีเป้าหมายเป็น .NET Framework 3.5 ได้แล้ว

ขั้นตอนเหมือนจะผ่านไปได้ด้วยดี ผมก็เริ่มทำการสร้าง Code ทดสอบมีการเรียกใช้งาน SPSite และ SPWeb แล้วจึงทำการสร้าง TestInitialize เพื่อสร้างออปเจ็คของ SPSite และ SPWeb เพื่อผ่านค่าไปยัง Code ซึ่งก็ไม่ได้ทำอะไรผิดปกติ เมื่อทำการรันเทส ก็พบข้อผิดพลาดยอดนิยมที่คาดว่าจะได้เจอนั่นคือ

System.IO.FileNotFoundException: The Web application at {sharepointurl} could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.

สิ่งแรกที่ผมเดาคือ เพราะ Platform target ของ SharePoint Project ไม่ได้เป็น x64 ก็เลยลองเปลี่ยนจาก Any CPU เป็น x64 แต่แล้วก็พบกับ Error ตัวอื่นคือ

System.BadImageFormatException: Could not load file or assembly '{assemblyinfo}' or one of its dependencies. An attempt was made to load a program with an incorrect format.

ดูจะเลวร้ายไปกันใหญ่ครับ ปัญหานี้เกิดเพราะการพยายามโหลดไลบารี่ x64 จาก x86 ครับ นั่นเพราะตัวโหลดเทสยังคงทำงานเป็น x86 อยู่ ไม่ได้เป็น x64 แบบที่เราต้องการ ก็ลองค้นหาข้อมูลก็ได้พบข้อมูลจากบล็อกหนึ่งในทีมที่ทำตัว Test ใน Visual Studio ให้แนวทางไว้ว่า สามารถทำ Class คั่นกลางหลอกได้ โดย Class นี้จะไปเรียกไลบารี่ x64 อีกต่อหนึ่งไม่ให้ตัวเทสเรียกไลบารี่ x64 โดยตรง ซึ่งก็เหมือนจะใช้ได้นะ แต่หลังจากนั้นก็ไปค้น ๆ ในบล็อกของคนเดิม เจอสิ่งที่เด็ดกว่านั้นนั่นคือ Visual Studio Team Test Load Agent Goes 64 Bit! ซึ่งนั่นก็คือตัวรันเทสมันเป็น x64 อยู่แล้ว แต่เราต้องตั้งค่ามันให้เป็น โดยต้องไปปรับค่าของ Run tests in 32 bit or 64 bit process ซึ่งหลบอยู่ในหัวข้อ Hosts ใน Test Setting ให้เป็น Run tests in 64 bit process on 64 bit machine แล้วก็ไปทำการปรับค่า Platform target ของทั้ง Test Project และ SharePoint Project เป็น Any CPU

หลังจากนั้นทุก Error ที่เจอก็จะหายไป สามารถทำ Test ได้แล้ว แต่วิธีนี้ก็ยังมีข้อจำกัดคือ ไม่สามารถทำการทดสอบ private Method ได้ จะเจออาการ BadImageFormatException ซึ่งก็คาดเดาได้ว่าเกิดจากกระบวนการพิเศษที่ใช้ล้วงลูกนั่นเอง ก็หวังว่าจะมีการปรับปรุงแก้ไขกันต่อไปให้สามารถใช้งานได้

Blog Tags

ตามล่า สด.๘

Submitted by ezybzy on Fri, 2012-01-27 - 00:29

ผมทำเอกสารสำคัญในชีวิตหายไปหลายชิ้น ไม่ว่าจะเป็นสมุดบัญชีธนาคาร, เอกสารหลักฐานการศึกษา (ยังดีที่ยังเหลือใบปริญญานะ), และเอกสารทางการทหาร ตอนนี้ก็จะขอเล่าว่าการติดตามเอกสารทางการทหารกลับมาต้องทำอะไรบ้าง

สำหรับเอกสารที่ผมไปตามล่าก็คือ สด.๘ ซึ่งใช้ยืนยันว่าปลดประจำการเป็นกองหนุนไปแล้ว

ขั้นตอนแรกที่เราทราบกันดีคือ ไปแจ้งความ ผมก็ไปแจ้งความตามปกติซึ่งตรงนี้เจ้าหน้าที่ตำรวจก็ช่วยเราไม่ได้มาก เพราะเขาก็ไม่ทราบว่า สด.๘, สด.๙ มันคืออะไร (ก็แน่ล่ะ พี่เรียนนายร้อยมา พี่ผ่านเตรียมทหารมา พี่คงไม่เคยไปเรียน รด. แบบพวกผมหรอกนะ) จุดนี้เราต้องเตรียมตัวให้ดีว่าเราจะแจ้งความว่าเอกสารอะไรของเราหายกันแน่ ชื่ออย่างเป็นทางการของเอกสารก็คือ “เอกสารสำคัญแบบ สด.๘” (ถ้านึกไม่ออกก็ สด.๘ ไปเลยไม่ต้องบรรยายว่าคืออะไร) แจ้งความแล้วใบแจ้งความมีอายุ 90 วัน

ขั้นที่สองไปติดต่อสัสดีที่ภูมิลำเนาทหาร ซึ่งก็คือสถานที่ที่บิดามีชื่ออยู่อาศัยนั่นเอง เผอิญพ่อผมชื่ออยู่อีกเขตกับที่ผมอยู่ ผมก็ต้องเดินทางไปสำนักงานเขตนั้น (ก็กลับไปที่ที่เคยออกเอกสารนี้ให้ผมเมื่อ 7–8 ปีก่อนนั่นแหละ) พอไปถึงก็ต้องเตรียมเอกสารดังรายการต่อไปนี้

  • รูปสุภาพ 1 นิ้ว 3 รูป
  • สำเนาทะเบียนบ้าน 2 ชุด
  • สำเนาบัตรประชาชนหน้าหลัง 2 ชุด และนำตัวจริงไปด้วย
  • สำเนาใบแจ้งความ 2 ชุด และใบแจ้งความตัวจริง
  • ค่าปรับ 1 บาท (ถ้าผมได้ยินมาไม่ผิดนะ)

เสร็จแล้วสัสดีก็จะส่งคำร้องไปยังสัสดีจังหวัดให้ดำเนินเรื่องออก สด.๘ เล่มใหม่ให้ซึ่งต้องการลายเซ็นต์หลายชื่อ ทำให้ใช้เวลาดำเนินการนานพอสมควร (เป็นเดือนเลย)

แต่ถ้าคุณจำเป็นต้องใช้เอกสารอะไรก็ตามเพื่อยืนยันสถานะทางทหารของคุณ มีอีกทางเลือกที่สัสดีแนะนำมาคือ สด.๓ ซึ่งเป็นเอกสารตัวเดียวกับที่คุณเขียนตอนคุณเรียน รด. ปี 3 นั่นเอง (ซึ่งก็มีเอกสารอีกอย่างที่คุณได้เขียนด้วยตัวเองไปแล้วตอนเรียน รด. นั่นก็คือ สด.๑) แต่สำหรับผมที่จำอะไรไม่ได้เลยว่าตัวเองมีเลขยศอะไร ผมก็ต้องไปตามล่าข้อมูลนี้มา เอกสารที่มีข้อมูลนี้นั่นคือ สด.๑ ซึ่งที่สัสดีจังหวัดหรือประจำเขตจะมีข้อมูลนี้ ซึ่งผมได้ไปคุ้ยกอง สด.๑ ที่สัสดีกรุงเทพมา (อยู่ที่สำนักเทศกิจ ตรงวัดประยูรวาส ย่านสะพานพุทธฯ) เมื่อเข้าไปครั้งแรกก็ต้องตกใจกับกองเอกสารที่อยู่ในสภาพเสียหายไปตามกาลเวลา (จ่าบอกว่า เพิ่งขนหนีน้ำท่วมมา มันก็เลยดูยังไร้ระเบียบ เพราะยังไม่มีเวลามาจัดใหม่อีกรอบ) เมื่อเจอข้อมูลที่ต้องการ ก็ทำให้ค้นหาข้อมูล สด.๓ เจอ แล้วก็ไปทำสำเนาหน้า สด.๓ ของเราออกมา

เจ้าหน้าที่ข้างในเท่าที่ผมสังเกต แต่งตัวเหมือนทหาร แต่ที่สงสัยคือทำไมป้ายชื่อบนโต๊ะที่เป็น นาย, นาง, นางสาว แทนชั้นยศล่ะ? มีแต่สัสดีตัวจริงที่นั่งอยู่โต๊ะในสุดที่ขึ้นยศทหารจริง ๆ (ตอนนี้เป็น พ.ต. ที่มาช่วยราชการ) อาจจะเพราะว่ายศเขาไม่สูงพอที่จะเอามาขึ้นเป็นคำนำหน้าแทนก็ได้ (เท่าที่ทราบคือนายร้อยขึ้นไปถึงจะนำยศมาเป็นคำนำหน้าชื่อแทน ยศนายสิบ, จ่า ถ้าไม่ได้รับราชการทหารมักจะไม่นิยมนำมาเป็นคำหน้าชื่อ เช่นกรณีของผู้สำเร็จ รด. ปี 3 ทั่วไปที่ได้ยศเป็นสิบเอก)

ตอนนี้ผมก็จะไปดำเนินเรื่อง สด.๘ ให้เสร็จสิ้นก่อน ส่วน สด.๓ ก็สามารถนำไปใช้สมัครงานได้ (อย่างน้อยเขาก็เห็นว่าเราปลดเป็นกองหนุนแล้ว ไม่ได้มีภาระว่าต้องถูกเรียกตัวเข้าประจำการรับการฝึกประจำปีในเร็ววันนี้) แล้วก็ต้องจำไว้ว่า เอกสารสำคัญเก็บให้ดี อย่าให้เผลอถูกนำไปทิ้งได้อีก!

Blog Tags

Siri + Thunderbolt Display + AppleTV

Submitted by ezybzy on Sat, 2012-01-07 - 15:15

มีข่าวลือว่า Apple กำลังซุ่มทำโทรทัศน์ ซึ่งจะมี Siri ผนวกเข้าไปด้วย

โดยส่วนตัวหากย้อนมามองผลิตภัณฑ์ของ Apple ผมคิดว่ามันน่าจะเอามารวมกันได้นะ Thunderbolt Display ที่มีฟังก์ชั่นการทำงานของ AppleTV ซึ่งผนวก Siri เข้าไป อาจจะถึงขั้นมี Slot Loading BlueRay เข้าไปด้วย (อันหลังนี้ไม่ค่อยหวังนะ)

แต่ขนาดจอมันจะซักเท่าไรกันล่ะ? 50 นิ้วกับความละเอียด 2560 ผมคิดว่าภาพที่ได้มันน่าจะหยาบเกินไป ซึ่งก็น่าจะเป็นให้จอตัวนี้ถูกแยกมาเป็นผลิตภัณฑ์ทดลองอีกหนึ่งตัว ที่มีรูปลักษณ์ล้อกับ Thunderbolt Display (ฐานแบบปัจจุบันจะรองรับน้ำหนักไหวไหมนะ?) แต่ราคาอาจจะไม่เป็นมิตรซักเท่าใดนัก

Blog Tags

เมื่อ Stop แล้วมันไม่จบ

Submitted by ezybzy on Thu, 2012-01-05 - 10:39

เคยไหม เปิดหน้าเว็บเพื่อทำธุรกรรมบางอย่างแล้วรอนานมากจนกด Stop แล้ว Refresh เพื่อเริ่มใหม่?

สำหรับคนทั่วไปอาจจะคิดว่าเมื่อ Stop แล้วทุกอย่างจะจบพร้อมเริ่มใหม่เมื่อเรากด Refresh แต่จริง ๆ แล้วมันไม่ได้เป็นเช่นนั้นเลย

ความจริงที่เกิดขึ้นคือการ Stop ของเราเป็นแค่การหยุดรับผลลัพธ์ (HTTP Response ที่ถูกส่งกลับมา) แต่กระบวนการสร้างผลลัพธ์นั้นก็ยังคงดำเนินต่อไป

ตัวอย่างง่าย ๆ ลองเขียน Java Servlet หนึ่งตัวโดย Code ต่อไปนี้

try {
    this.getServletContext().log("Begin: " + Calendar.getInstance().toString());
    Thread.sleep(20 * 1000);
    // ... (Write something out to screen)
    throw new Exception();
} (Exception e) {
    this.getServletContext().log("End: " + Calendar.getInstance().toString());
}

จากตัวอย่าง Code ด้านบน จะเห็นว่ามีการหน่วงเวลาไว้ 20 วินาทีก่อนจะแสดงผลใด ๆ ออกทางหน้าจอ แต่หากเรากด Stop ไปที่ช่วงวินาทีที่ 15 แล้วอ่าน Log ของ Tomcat หลังจากนั้นซักพักใหญ่ เราจะพบทั้ง Begin และ End ใน Log นั่นจึงเป็นการพิสูจน์ได้ว่า เมื่อเกิดการ Request ขึ้นมา กระบวนการในการจัดการ Request จะถูกดำเนินการจนแล้วเสร็จโดยไม่สนว่าผู้รับ (ในกรณีนี้คือ Browser) จะอยู่รอรับผลหรือไม่

Blog Tags

ฮ่องกง เมื่อเดือนก่อน

Submitted by ezybzy on Sun, 2011-10-30 - 13:05

ไปฮ่องกงมาครับ แต่ไปมาเมื่อเดือนที่แล้ว ไปเปิด Apple Store นั่นแหละ

นี่ก็ถือว่าเป็นครั้งแรกในชีวิตสำหรับการเดินทางไปฮ่องกงของผม ไปถึงสุวรรณภูมิก็ยังคงรู้สึกไม่คุ้นเคยเช่นเดิม อาจจะเพราะทางเข้าไปตรวจหนังสือเดินทางทั้งหลายมันเปลี่ยนจุดจากที่เคยเข้า (คราวนี้ไป TG ที่อยู่ทางปีกกลางเกือบซ้าย คราวก่อน ๆ ไป EK, AB ที่ทางเข้าอยู่ทางปีกขวา) ตอนอยู่บนเครื่องก็ได้พบกับผู้ร่วมทริป 2 ท่าน ท่านหนึ่งเป็นหมออีกท่านทำงานอยู่ในส่วนราชการของกระทรวงการคลัง (แต่ที่ทำงานอยู่ศูนย์ราชการฯ กรุงเทพ) ถือว่าโชคดีนะครับ เพราะเราไปถึงฮ่องกงก่อนที่พายุจะเข้าในสัปดาห์ต่อมา

Blog Tags

คำตอบ

Submitted by ezybzy on Tue, 2011-08-23 - 15:15

คำคม ๆ จากรายการ “วีรชนคนถูกลืม”

หลักฐานไม่ใช่คำตอบ คำตอบคือเมื่อวาน

ทุกที่ที่มีการลงหลักปักฐานของพระพุทธศาสนาแล้ว ที่นั่นย่อมดั่งพระพุทธองค์เสด็จมาประทับพระพุทธบาท

เรื่องทั้งหมดที่ถูกสร้างขึ้นมา หลักฐานที่หามาสนับสนุนการสร้างเป็นเรื่อง อาจไม่ใช่คำตอบของคำถามที่ว่ามีขุนรองปลัดชูจริงหรือไม่ หรือว่าวัด 400 เกี่ยวกับบันทึก 2 บรรทัดนี้จริงหรือไม่ ในทำนองเดียวกับการมีอยู่ของรอยพระพุทธบาทที่สระบุรี

ถ้าอยากรู้คำตอบคงต้องย้อนกลับไปดูเมื่อวานว่ามีขุนรองปลัดชูที่อำเภอวิเศษชัยชาญจริงหรือไม่ หรือพระพุทธองค์เสด็จมาฝากรอยพระพุทธบาทจริงหรือไม่

Blog Tags