การพัฒนา Unit Testing โดย xUnit test library (.NET Core)

บทความนี้นำเสนอขั้นตอนการพัฒนา Unit Test อย่างง่ายโดยแสดงให่้เห็นการพัฒนาทีละขั้นตอน สำหรับระบบที่พัฒนาบน .NET Core โดยใช้ xUnit เพื่อทำความเข้าใจการพัฒนาแบบ test-driven development (TDD) ซึ่งในขั้นแรก เริ่มต้นด้วยการสร้าง source project ที่จะใช้สำหรับการทดสอบ สร้าง folder “TestSample” และ sub folder ชื่อ “CalcTool”  จากนั้นเปิด command prompt เข้าไปที่ folder “CalcTool” เพื่อทำการสร้าง .NET Core project โดยใช้คำสั่ง dotnet new classlib rename class1.cs เป็นชื่อ calc.cs และเขียน code ดังนี้ using System; namespace CalcTool { public class Calc { public int AbsAddByOne(int value) { throw new NotImplementedException(“Not implemented”); } } } สร้าง test project โดยกลับไปที่ folder “TestSample” และสร้าง sub folder ชื่อ “CalcTool.Tests” จากนั้นเปิด command prompt เข้าไปที่ folder “CalcTool.Tests” เพื่อทำการสร้าง .NET Core project โดยใช้คำสั่ง dotnet new xunit โดยคำสั่งนี้จะทำการสร้าง test project ที่ใช้ xunit test library และกำหนดค่า test runner ไว้ใน CalcTool.Tests.csproj file : CalcTool.Tests.csproj <Project Sdk=”Microsoft.NET.Sdk”> <PropertyGroup> <TargetFramework>netcoreapp1.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include=”Microsoft.NET.Test.Sdk” Version=”15.0.0″/> <PackageReference Include=”xunit” Version=”2.2.0″/> <PackageReference Include=”xunit.runner.visualstudio” Version=”2.2.0″/> </ItemGroup> </Project> เพิ่ม reference ไปยัง project ที่ต้องการทดสอบซึ่งในที่นี้คือ CalcTool project โดยใช้คำสั่ง dotnet add reference ../CalcTool/CalcTool.csproj ก่อนที่จะ build CalcTool project หรือ CalcTool.Tests project ต้อง execute คำสั่ง dotnet restore เพื่อ restore NuGet package ที่จำเป็นต้องใช้ในแต่ละ project เริ่มพัฒนา unit testing โดยลบ file “UnitTest1.cs” และสร้าง file ใหม่โดยใช้ชื่อว่า “CalcTest.cs” และเขียน code ดังนี้ using System; using Xunit; using CalcTool; namespace CalcTool.Tests { public class CalcTest { [Fact] public void AbsAddByOneTest() { var c = new Calc(); var result = c.AbsAddByOne(5); Assert.Equal(result, 6); } } } *[Fact]

Read More »

Itextsharp #3 คู่มือเทคนิคพื้นฐานการใช้งาน PdfTable สำหรับมือใหม่ ตอนที่ 1

บทความนี้ผู้เขียนจะพูดถึงส่วนที่มีการทำงานในรูปแบบ Table สำหรับผู้ที่เริ่มต้นใหม่สามารถอ่านบทความ ตอนที่ 1 และ ตอนที่ 2 เพื่อความเข้าใจต่อเนื่องกันนะครับ ก่อนที่ผู้เขียนจะไปพูดถึงส่วนของการเขียนโปรแกรมนั้น ผู้เขียนอยากอธิบายเพื่อทำความเข้าใจให้กับผู้อ่านได้เห็นภาพได้ชัดเจนเกี่ยวลักษณะการทำงานของ Table ใน Itextsharp ต่อจากตอนที่แล้ว ที่ได้พูดถึงไว้แบบคร่าวๆ ตอนนี้เราจะลงรายละเอียดมากขึ้น ว่ามีการทำงานอย่างไร จากรูปตัวอย่างจะเป็นการแสดงส่วนของการทำงานในการสร้างTable ของโปรแกรม Itextsharp โดยเมื่อเราได้ทำการเพิ่ม pdfCell ลงไปใน pdfTable Itextsharp จะทำการนำ pdfCell มาเรียงต่อกันไปเรื่อยๆ และทำการอ้างอิงว่าในแต่ละ Row มีได้กี่ Collumn ตามที่ได้ระบุไว้ตอนสร้าง Table เมื่อมี Cell ครบตามกำหนดจะขึ้นRowใหม่ให้อัตโนมัติ แต่สิ่งที่ควรระวังคือ กรณีที่Rowนั้นๆมี Collumn ไม่ครบตามที่กำหนด โปรแกรมอาจไม่แสดงผลของส่วนนั้นได้ ซึ่งในตัวอย่างผู้เขียนได้กำหนดไว้ 3 Collumn ต่อ Row และได้เพิ่ม pdfCell ไปทั้งหมด 9 อันด้วยกันครับ เมื่อทำการแสดงผลจะได้ Table ที่มีขนาด 3×3 นั้นเอง PdfPTable PdfTable = new PdfPTable(3);//#1 float[] tbwidths = { 50f, 50f, 50f}; PdfTable.SetWidths(tbwidths); PdfTable.WidthPercentage = 100; PdfPCell PdfCell = null; PdfCell = new PdfPCell(new Phrase(new Chunk(“1”, bold)));//#2 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“2”, bold)));//#3 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“3”, bold)));//#4 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“4”, bold)));//#5 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“5”, bold)));//#6 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“6”, bold)));//#7 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“7”, bold)));//#8 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“8”, bold)));//#9 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); PdfCell = new PdfPCell(new Phrase(new Chunk(“9”, bold)));//#10 PdfCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfTable.AddCell(PdfCell); จาก code ด้านบนผู้เขียนได้ทำการสร้าง Table ขึ้นมาโดยกำหนดขนาด Collumn ไว้เท่ากับ 3 (#1)และทำการกำหนดขนาดความกว้างของ Collumn ในบรรทัดถัดมา เมื่อทำการสร้าง Table เรียบร้อยแล้วผู้เขียนก็ทำการสร้างและเพิ่ม Cell ลงใน Table ไล่ลงมาตามลำดับใน Code (#2-#10) แค่นี้เราก็ได้ Table ตามรูปตัวอย่างแล้วครับ

Read More »

ภาพสวยประกอบบน office ด้วย Pickit

ในการนำเสนองานต่างๆ สิ่งที่ช่วยให้การนำเสนอดูน่าสนใจมากยิ่งขึ้น คือ รูปภาพและรูปแบบการจัดวาง ซึ่งใน office จะมี Add-in ที่ชื่อว่า Pickit ซึ่งเป็นเป็นเครื่องมือที่ช่วยการค้นหาภาพตามที่เราต้องการนำมาใช้ในงานนำเสนอของเราได้ มาดูขั้นตอนการใช้งานกันเลยค่ะ  1.เริ่มต้นเราต้องทำการติดตั้ง Add-in ซึ่งสามารถติดตั้งได้ใน Microsoft office (Word, excel, power point) ในที่นี้จะนำเสนอในส่วนของ power point ไปยังแท็บ INSERT > Store   2.เป็นหน้าจอ Apps for Office ในช่องค้นหา พิมพ์คำว่า “Pickit” เมื่อเจอรายการ “Picket Free Images” ให้กดปุ่ม Add 3.เมื่อติดตั้งโปรแกรมเรียบร้อย โปรแกรมจะปรากฎอยู่ด้านขวาของหน้าจอ 4.หากโปรแกรมไม่ขึ้นมาสามารถเรียกใช้โปรแกรมได้ที่ INSERT> My Apps > Pickit Free Images 5.จากนั้นพิมพ์ชื่อภาพที่ต้องการหรือเลือกภาพตามหมวดหมู่ต้องการได้ ในตัวอย่างนี้ข้อยกตัวอย่าง คำว่า “network” ระบบก็จะแสดงรายการภาพ 6.จากนั้นเลือกภาพที่ต้องการ ก็กดปุ่ม Insert เพื่อดึงภาพมาใช้ในงานของเรา   เพียงเท่านี้เราก็ได้ภาพสำหรับตกแต่งให้งานนำเสนอของเรา น่าสนใจมากยิ่งขึ้น นอกจากนี้ภาพดังกล่าว ยังเป็น “ภาพฟรี” อีกด้วย

Read More »

การส่งค่าจาก Models แบบ Multiple มายัง Single View

โดยปกติแล้วใน MVC เราจะไม่สามารถส่งค่าที่อยู่ใน Models มามากกว่า 1 Models จาก Controller มายังวิวเดียวกันได้ ซึ่งจริงๆ แล้วมีเทคนิคที่จะทำให้สามารถส่งค่าผ่านมาได้โดยง่าย ดังหลายๆ วิธีต่อไปนี้   ดาวน์โหลด Source Code ได้ที่นี่ครับ   หมายเหตุ: ในตัวอย่างผมจะใช้ method GetTeachers() และ GetStudents() ร่วมกันในหลายวิธีนะครับ ตามนี้ครับ   1. ใช้ View Model View Model เป็น Class เดี่ยวๆ ที่อาจจะประกอบด้วยหลาย models อยู่ภายใน ซึ่งไม่ควรจะมี method อยู่ภายใน จากตัวอย่างข้างล่าง เป็น model ที่มี 2 properties ซึ่งจะต้องทำการ define strongly typed เพื่อให้ Intellisense สามารถใช้งานได้ Controller View   2.ใช้ View Data การใช้ ViewData เป็นอะไรที่ง่ายมาก สามารถเก็บค่าและส่งค่าผ่านจาก Controller ไปยัง View ได้ทันที (คล้ายกับตัวแปล Session ใน C# รุ่นก่อนๆ) ดังตัวอย่าง Controller   View   3.ใช้ Dynamic Model จะต้องทำการเรียกใช้คลาส ExpandoObject (อยู่ภายใต้ namespace: System.Dynamic เฉพาะใน .NET Framework 4.0 ขึ้นไป) จะอนุญาตให้เราเพิ่มหรือลบค่า properties ของ object ขณะ runtime ซึ่งจะทำให้เราสามารถสร้าง object และ เพิ่มหรือลบ ค่าเข้าไปใน properties ได้ ซึ่งมีข้อเสียคือการส่งค่าแบบ dynamic นี้จะไม่สามารถใช้ strongly typed model ได้ ซึ่งจะต้องนำไป cast เป็น type ที่ต้องการ เมื่อเรียกใช้อีกครั้งหนึ่ง Controller View     4. ใช้ View Bag จะเหมือนกับการใช้ View Data ซึ่ง View Data เป็น dictionary object ต่างจาก View Bag ที่เป็น dynamic property ของ ControllerBase Class Controller View   5. ใช้ Tuple Tuple คือ Object ที่ไม่สามารถเปลี่ยนรูปได้ (Immutable), ขนาดคงที่และเรียงตามลำดับ (fixed-size and ordered sequence object) โดยโครงสร้างจะมีหมายเลขที่เจาะจงและลำดับที่ของข้อมูล โดย .NET Framework รองรับได้สูงสุด 7 ข้อมูล (elements) ดังตัวอย่าง Controller View   6. ใช้การ Partial View (Partial Render in Action Method) ทำการ render partial view อยู่ภายในวิว ซึ่งเราสามารถแยกเป็นสอง partial view โดยแต่ละ partial view ก็จะมี model เป็นของจนเอง ตามตัวอย่าง Controller View  

Read More »

ไวรัส shortcut

เหตุที่ตั้งชื่อบทความว่า ไวรัส shortcut ไม่ได้หมายความว่าไวรัสประเภทนี้ชื่อ shortcut แต่เป็นอาการทีเกิดขึ้นเมื่อไวรัสตัวนี้ทำงาน โดยสาเหตุและลักษณะอาการที่พบคือ เมื่อเรานำ flash drive หรืออุปกรณ์จำพวก removable drive (เช่น external hardisk) ไปใช้งานกับเครื่องคอมพิวเตอร์เครื่องใดเครื่องหนึ่ง ไฟล์ที่อยู่ใน flash drive หรือ removable drive จะหายไป และจะมีไฟล์ shortcut เกิดขึ้นแทนที่ โดย shortcut มักจะถูกตั้งชื่อเหมือนกับไฟล์ข้อมูลเดิมที่มีอยู่ ซึ่งหากเราเผลอเปิดไฟล์ shortcut ดังกล่าว ก็จะเป็นการไปเรียกไฟล์ไวรัสให้ทำงานนั่นเอง ส่วนไฟล์ข้อมูลเดิมนั้นไม่ได้หายไปไหน เพียงแต่เมื่อแรกเริ่มที่ติดไวรัสมานั้น ไฟล์เหล่านี้จะถูกซ่อนไว้ไม่ให้เห็นนั่นเอง   ตัวอย่างไฟล์ shortcut ที่ไวรัสสร้างขึ้น ข้อสังเกตุคือจะมีไอคอนเป็นแบบ shortcut (ไอคอนรูปลูกศร)   แนวทางการแก้ไข (ในบทความนี้จะยกตัวอย่างบน Windows 8.1) อันดับแรกสิ่งที่ต้องเตรียมคือ เครื่องคอมพิวเตอร์ที่ไม่ติดไวรัส เพื่อใช้สำหรับกำจัดไวรัสและกู้ข้อมูลที่อยู่ใน flash drive หรือ removable drive โดยคอมพิวเตอร์ควรมีความพร้อมดังต่อไปนี้ – ติดตั้งโปรแกรม antivirus ที่อัพเดตฐานข้อมูลไวรัสล่าสุด กรณี Windows 8.1 จะมี antivirus มาพร้อมอยู่แล้วคือ Windows Defender ซึ่งควรอัพเดตฐานข้อมูลไวรัสให้ล่าสุดก่อน – ปิด Autorun หรือ AutoPlay เพื่อป้องกันไม่ให้ไฟล์ใน  flash drive หรือ  removable drive ที่ติดไวรัส ถูกเปิดอ่านเมื่อมีการเชื่อมต่อกับเครื่องคอมพิวเตอร์ ซึ่งอาจจะเป็นสาเหตุให้ไวรัสแพร่กระจายต่อไปได้ เชื่อมต่อ flash drive หรือ removable drive ที่ติดไวรัสเข้ากับเครื่องคอมพิวเตอร์ จากนั้นทำการแสกนไวรัสด้วยโปแกรม antivirus ที่เตรียมไว้  และทำตามคำแนะนำของโปรแกรม antivirus  เพื่อกำจัดไฟล์ไวรัสและไฟล์ shortcut ที่ถูกไวรัสสร้างขึ้นมา   ซึ่งเมื่อเสร็จสิ้นขั้นตอนนี้แล้ว อาจจะพบว่า drive จะกลายเป็นพื้นที่ว่าง ๆ แต่หากดู properties ของ drive แล้วจะพบว่ามีเนื้อที่ส่วนหนึ่งถูกใช้ในการเก็บข้อมูล ซึ่งที่จริงแล้วก็คือไฟล์ข้อมูลที่ถูกไวรัสซ่อนไปนั่นเอง ตัวอย่าง falsh drive ที่ติดไวรัส หลังจากกำจัดไวรัสออกไปแล้ว จะเห็นเป็น drive ว่าง ๆ แต่เมื่อดู properties จะเห็นว่ามีเนื้อที่ส่วนหนึ่งที่มีการใช้เก็บข้อมูลอยู่   ส่วนของขั้นตอนการกู้ไฟล์ที่หายไปนั้น ก็คือการทำให้คอมพิวเตอร์ของเราเห็นไฟล์ที่ซ่อนไว้นั่นเอง ซึ่งโดยปกตินั้น เราสามารถตั้งค่าการแสดงไฟล์ได้ในหน้าต่าง File Explorer โดยก่อนเข้าไปตั้งค่านี้ ให้เราเข้าไปที่ drive ที่ต้องการกู้ข้อมูลก่อน เพื่อจะได้เห็นผลจากการตั้งค่าได้เลย  จากนั้นเลือกเมนู View ที่อยู่ด้านบน แล้วเลือกเลือกเมนู Options แล้วเลือกคำสั่ง Change folder and search options เสร็จแล้วจะปรากฏหน้าต่างสำหรับตั้งค่า ต่อมาคือให้ไปที่แท็บ View จากนั้นให้ลองเลือกตัวเลือก ดังนี้ เลือก Show hidden files, folders, and drives จากนั้นกดปุ่ม Apply หากไฟล์ที่ถูกซ่อนยังไม่ปรากฏ ให้เลือกตัวเลือก Hide protected operating system files (Recommended) แล้วกดปุ่ม Apply ซึ่งเมื่อถึงขั้นตอนนี้แล้ว ไฟล์ที่ถูกซ่อนไว้ก็น่าจะปรากฏขึ้นมาแล้ว จะสังเกตเห็นว่าไฟล์ข้อมูลที่หายไปจะปรากฏขึ้นมา แต่ไอคอนจะเป็นสีจาง ๆ เนื่องจากถูกตั้งค่าให้เป็น Hidden โดยไวรัส และเมื่อดู properties ของไฟล์ จะพบว่าไม่สามารถเปลี่ยนค่าจาก Hidden เป็นปกติได้ เนื่องจากตัวเลือก Hidden ถูก disable อยู่ วิธีการแก้ไขเพื่อเอาค่า Hidden ออกทำได้ดังนี้คือ อันดับแรก ให้กลับไปตัั้งค่าการแสดงผลไฟล์และโฟลเดอร์ให้เป็นเหมือนเดิมก่อน (ติ๊กเครื่องหมายถูกตัวเลือก Hide protected operating system files (Recommended) แล้วกดปุ่ม

Read More »