Toad มี User Interface ที่ช่วยให้ User เข้าใจ Databases และ Table Relationships ได้ดียิ่งขึ้น มันสามารถสร้าง Data Models ทั้งแบบ Logical และ Physical และยังสามารถ Map Attributes ทั้งหมดของ Database ใน Physical Model ให้โดยอัตโนมัติ
Models และ Synchronization
Toad ช่วยให้ User สามารถ Convert Logical Model เป็น Physical Model ที่เลือกไว้ (เช่น Oracle, SQL Server เป็นต้น) และสามารถ Convert Physical Model ที่เลือกไว้ เป็นรูปแบบอื่น อย่างเช่น Convert Oracle Model ไปเป็น SQL Server
Tool นี้จะมี Feature ของการ Synchronization อีกทั้ง User สามารถเปรียบเทียบ Models กับ Database และสร้าง Migration Scripts ได้ นอกจากนี้ยังช่วยให้ User สามารถ Update Model จาก Database ได้โดยตรง
Toad สามารถทำ Processes อย่าง การเปรียบเทียบ Data และ Schema ได้โดยอัตโนมัติ
Microsoft จะยังคงให้การสนับสนุน Coded UI tests ใน Visual Studio 2019 อย่างเต็มที่ในอีกหลายปีในอนาคต แต่จะจำกัดเฉพาะการแก้ไขข้อบกพร่อง จะไม่มีการเพิ่มคุณสมบัติใหม่ โดยที่เราสามารถติดตั้ง Visual Studio รุ่นต่าง ๆ แบบ side by side ซึ่งหมายความว่านักพัฒนาจะสามารถใช้ Visual Studio 2019 สำหรับการทดสอบ Coded UI test ที่มีอยู่ ในขณะที่สามารถใช้ Visual Studio รุ่นใหม่ในอนาคตสำหรับความต้องการการพัฒนาในแบบอื่น ๆ
กลไกการติดตั้งแบบ side by side ทำให้ CI/CD pipelines ทำงานได้อย่างราบรื่นโดยไม่หยุดชะงักในขณะที่เปลี่ยนแปลง นี่เป็นเพราะ Coded UI tests ทำงานเป็นส่วนหนึ่งของ CI/CD pipelines ใน Azure DevOps โดยการทดสอบจะทำงานกับ Visual Studio รุ่นใดรุ่นหนึ่งที่ติดตั้งใน agent หรือแพลตฟอร์มทดสอบรุ่นใดรุ่นหนึ่งโดยเฉพาะ ซึ่งหมายความว่าเราไม่จำเป็นต้องใช้ Azure DevOps server สองรุ่นที่แตกต่างกันเพื่อให้สามารถทดสอบ Coded UI ที่มีอยู่ ในขณะที่มีการเปลี่ยนแปลง
ทางเลือกที่แนะนำใช้แทน Coded UI Test
Microsoft แนะนำให้ใช้ Open source UI testing tools Selenium และ Appium มาระยหนึ่งแล้ว ซึ่ง Visual Studio 2019 ถือเป็น Visual Studio รุ่นสุดท้ายที่มีฟังก์ชัน Coded UI test โดยที่ Microsoft แนะนำให้ใช้ Selenium สำหรับการทดสอบเ web application และAppium กับ WinAppDriver สำหรับการทดสอบ Desktop application (WPF, WinForms, Win32) และ UWP apps
ไม่มีเครื่องมืออัตโนมัติที่จะช่วยย้ายจาก Coded UI test ไปยัง Selenium หรือ Appium ในขณะนี้ เราแนะนำให้การสร้าง unit test ใหม่ ควรใช้ทาง Selenium หรือ Appium ในขณะที่วางแผนการแทนที่ Coded UI test เก่าเป็น Selenium หรือ Appium ให้เสร็จสมบูรณ์ก่อนสิ้นสุดระยะเวลาการสนับสนุนจาก Visual Studio
Selenium Browser Automation Project
Selenium เป็นเครื่องมือและไลบรารี สำหรับใช้งานและสนับสนุนการทำงานอัตโนมัติของ web browser มันมีส่วนขยายที่จะจำลองการโต้ตอบของผู้ใช้กับ browser และโครงสร้างพื้นฐานสำหรับการใช้งานข้อกำหนด W3C WebDriver ที่ช่วยให้เราสามารถเขียนรหัสที่สามารถใช้ได้สำหรับ web browser หลักทั้งหมด
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
class HelloSelenium
{
static void Main()
{
using (IWebDriver driver = new FirefoxDriver())
{
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
driver.Navigate().GoToUrl("https://www.google.com/ncr");
driver.FindElement(By.Name("q")).SendKeys("cheese" + Keys.Enter);
IWebElement firstResult = wait.Until(ExpectedConditions.ElementExists(By.CssSelector("h3>div")));
Console.WriteLine(firstResult.GetAttribute("textContent"));
}
}
}
วิธีพื้นฐานคลาสสิคยิ่งนัก โดยเจ้า Windows Power Manager นั้นจะมีติดตั้งมาให้บนโน้ตบุ๊คทุกตัว(ที่ใช้ Windows) โดยวิธีที่ง่ายที่สุดที่ไม่ต้องปรับแต่งอะไรเลยก็คือเลือกปรับให้มันเป็น Power Saver นั่นเอง แต่ระดับสมาชิก NBS คงไม่ทำอะไรง่ายๆ ซึ่งมันก็มีวิธีแอดวานซ์กว่านั้น ก็คือให้สังเกตเครื่องหมายรูปถ่านที่ Task Bar > คลิกซ้าย เลือก More Power Option > Change Plan Setting > Change Advance Power Option ที่นี้มันก็จะขึ้นหน้าต่าง Power Option
ILogger _log;
ICalc _calc;
[TestInitialize]
public void Initialize()
{
_log = Mock.Of<ILogger<Calc>>();
_calc = new Calc(_log);
}
[TestMethod]
public void Divide_ShouldThrowArgumentException_IfDivideByZero()
{
double result = _calc.Divide(10, 5);
result.ShouldBe(2);
}
[TestCleanup]
public void Cleanup()
{
// Optionally dispose or cleanup objects
_calc = null;
...
}
Shouldly Assertion Framework
Shouldly framework จะช่วยให้ unit test ทำได้ง่ายและเข้าใจได้ง่ายขึ้น มันจะช่วยผู้พัฒนาในการเขียนการยืนยันผลการทำงานของ unit tests ซึ่งเมื่อกลับมาดู unit test อีกครั้งสามารถอ่าน code แล้วเข้าใจวัตถุประสงค์และความคาดหวังของการทดสอบ
ในความคิดของผู้เขียน ผู้พัฒนาส่วนใหญ่มักไม่ชอบที่จะเขียน Unit testing บางคนอาจจะคิดว่ามันน่าเบื่อ หรือบางคนก็ไม่เห็นคุณค่าในการเขียน code เพื่อตรวจสอบการทำงานของ code อื่นๆ
Unit testing คือแนวทางในการเขียน code เพื่อตรวจสอบว่าหน่วยการทำงานใน แอปพลิเคชันซอฟต์แวร์ ว่าทำงานตามที่ตั้งใจไว้หรือไม่ เช่น หากตั้งใจที่จะให้ตัวอักษรตัวแรกของคำเป็น พิมพ์ใหญ่ unit test จะต้องสามารถตรวจสอบว่าตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่โดยไม่สนใจอักษรตัวอื่นๆ
ข้อดีอย่างหนึ่งของการเขียน unit tests ใน C # คือ เราสามารถใช้ Test Explorer ใน Visual Studio เพื่อตรวจสอบว่าการทดสอบทั้งหมดผ่านหรือไม่ โดยที่ไม่ต้องกังวลว่าการเปลี่ยนแปลงล่าสุดที่เขียน จะทำให้ระบบทำงานไม่ได้หรือไม่
การเลือก Testing Framework
Testing frameworks ช่วยให้เราสามารถใช้ attribute ในการเขียน unit tests [TestClass] หรือ [TestMethod] ซึ่ง attribute เหล่านี้บอกให้ Text Explorer ใน Visual Studio รู้จัก class หรือ method นั้นคือ unit test และจะรันโค้ดเพื่อตรวจสอบการทำงานว่าผ่านหรือไม่ผ่าน
Testing frameworks สำหรับ. NET ที่ได้รับความนิยมคือ
NUnit เป็น test framework แรกๆที่ได้รับความนิยมสำหรับผู้พัฒนา .NET, เมื่อเปรียบเทียบกับความสามารถของ MSTest ( test framework ของ Microsoft) โดยส่วนใหญ่ก็จะเหมือนกับใน NUnit และ MSTest เป็น test framework ที่ถูกสร้างขึ้นและสามารถใช้งานได้ใน Visual Studio สำหรับ xUnit.NET เป็นน้องใหม่ใน test framework ที่นำเสนอคุณสมบัติเพิ่มเติมและวิธีการที่ง่ายขึ้นในการเขียน unit tests ที่พัฒนาโดย NET Core
โดยส่วนใหญ่จะไม่ใช้เวลามากเกินไปในการพิจารณา test framework เพื่อใช้ในโครงการหากโครงการมีการกำหนด test framework ที่เฉพาะเจาะจง ก็ให้ใช้ test framework นั้น ถ้าไม่ได้กำหนด ก็ให้ทำการศึกษาและตัดสินใจเลือก test framework ที่เหมาะกับโครงการ
AAA ( Arrange, Act, Assert )
วิธีการเขียน unit test แบบ ‘AAA’ (Arrange, Act, Assert) เป็นวิธีปฏิบัติในการเขียน unit test และช่วยให้เราสามารถเขียน unit test ในรูปแบบที่ทำซ้ำและเข้าใจได้
Arrange
เราจะเริ่มเขียน unit test โดยการจัดเรียง objects ที่ต้องการทดสอบ ซึ่งอาจจะเป็นการ initializing class หรือ การเตรียมข้อมูลในฐานข้อมูลสำหรับทดสอบ หรือการ mocking object โดยการใช้ interface
public void Divide_ShouldThrowArgumentException_IfDivideByZero()
{
...
}
การกำหนดชื่อในรูปแบบนี้ จะเหมาะสำหรับการดูใน Text Explorer ซึ่งสามารถติดตามและเข้าใจได้อย่างง่ายดายว่า unit tests แต่ละหน่วยคืออะไรโดยไม่ต้องเปิดการทดสอบหน่วย
แนวทางการเขียน Unit Tests ที่ดีสำหรับ C # ยังไม่หมดเพียงเท่านี้ ในบทความต่อไป เราจะมาดูการทำ Test Initialize & Cleanup และ ตัวช่วยอื่นๆที่ใช้ในการเขียน unit tests