ฉันใช้ Visual Studio (บางครั้งก็มีความคมชัดมากขึ้น) เพื่อทำการทดสอบหน่วยของฉัน
ฉันได้ยินเกี่ยวกับ NUnit แต่ฉันไม่รู้หลายอย่างเกี่ยวกับมัน ...
ฉันควรสนใจหรือไม่ สามารถนำเสนอสิ่งที่ดีกว่า Visual Studio ได้หรือไม่?
ฉันควรใช้ NUnit และทำไม?
ฉันใช้ Visual Studio (บางครั้งก็มีความคมชัดมากขึ้น) เพื่อทำการทดสอบหน่วยของฉัน
ฉันได้ยินเกี่ยวกับ NUnit แต่ฉันไม่รู้หลายอย่างเกี่ยวกับมัน ...
ฉันควรสนใจหรือไม่ สามารถนำเสนอสิ่งที่ดีกว่า Visual Studio ได้หรือไม่?
ฉันควรใช้ NUnit และทำไม?
คำตอบ:
NUnit มีข้อดีกว่า MS-Test เล็กน้อย
Assert.AreEqual(expected, actual)
เทียบกับAssert.That(actual, Is.EqualTo(expected))
[TestCase]
! NUnit อนุญาตให้ทำการทดสอบตามพารามิเตอร์จากมุมมองปัจจุบันของฉัน (หลังจาก 8 เดือนของการพัฒนาโดยมีนักพัฒนาประมาณ 10 คนโดยเฉลี่ย) ฉันขอแนะนำให้ไม่ใช้ MSTest ด้วยเหตุผลต่อไปนี้
อีกอย่างถ้าฉันจะต้องตัดสินใจอีกครั้งเมื่อ 8 เดือนที่แล้วฉันก็คงต้องใช้ NUnit ฉันอาจไม่มีรายงานผลการทดสอบแบบรวม แต่นักพัฒนาจะมีประสบการณ์การทดสอบที่ราบรื่นยิ่งขึ้น
นี่คือประสบการณ์ของฉันกับ MS Test
เพิ่มเติม: ตอนนี้เรามีการทดสอบเพิ่มเติมไม่สามารถบอกได้ว่ามีกี่แบบ เป็นไปไม่ได้ที่จะเรียกใช้ทั้งหมดจาก Visual Studio อีกต่อไปเนื่องจาก OutOfMemoryExceptions และปัญหาความไม่เสถียรอื่น ๆ เราเรียกใช้การทดสอบจากสคริปต์ การดูผลการทดสอบใน Visual Studio จะเป็นเรื่องง่าย แต่เมื่อเปิดโซลูชัน VS จะขัดข้อง (ทุกครั้ง) ดังนั้นเราต้องค้นหาการทดสอบที่ล้มเหลวโดยใช้การค้นหาข้อความ ไม่มีข้อได้เปรียบของเครื่องมือในตัวอีกต่อไป
การอัปเดตอื่น : ตอนนี้เราใช้ VS 2013 หลายสิ่งหลายอย่างเปลี่ยนไป พวกเขาเขียนโปรแกรมทดสอบ MS Test ใหม่เป็นครั้งที่สามนับตั้งแต่เราเริ่มต้น สิ่งนี้ทำให้เกิดการเปลี่ยนแปลงอย่างมาก แต่ไม่มีเวอร์ชันใหม่ที่ทำอะไรได้ดีขึ้น เราดีใจที่เราไม่ได้ใช้คุณสมบัติพิเศษของ MS Test เพราะทั้งหมดนี้ไม่ได้รับการสนับสนุนอีกต่อไป เป็นเรื่องที่น่าเสียดายจริงๆ เรายังคงใช้สคริปต์ในการสร้างและเรียกใช้การทดสอบหน่วยทั้งหมดเพราะมันสะดวกกว่า Visual Studio ต้องใช้เวลาสองสามนาทีในการเริ่มเรียกใช้การทดสอบ (วัดเวลาหลังจากการคอมไพล์จนถึงการทดสอบครั้งแรกเริ่ม) พวกเขาอาจแก้ไขได้ด้วยการอัปเดตและนี่อาจเป็นปัญหาเฉพาะของโครงการของเรา อย่างไรก็ตาม Resharper จะเร็วกว่ามากเมื่อทำการทดสอบเดียวกัน
สรุป : อย่างน้อยเมื่อใช้ร่วมกับ Resharper MS Test ก็มีประโยชน์ และฉันหวังว่าในที่สุดพวกเขาจะค้นพบว่านักวิ่งทดสอบควรเขียนอย่างไรและจะไม่ทำการเปลี่ยนแปลงที่ผิดปกติแบบนี้เมื่อเราอัปเดต Visual Studio ในครั้งต่อไป
NUnit สามารถใช้ร่วมกับ Visual Studio ได้ มันเป็นกรอบไม่ใช่โปรแกรมแยกต่างหาก ดังนั้นคุณสามารถดูแลดูว่าเหมาะกับคุณหรือไม่ :)
"หลังจากติดตั้งปลั๊กอินแล้วคุณจะพบเมนูย่อยใหม่ภายใต้เมนูเครื่องมือ"
ดูhttp://nunitit.codeplex.com/สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการนำเข้า
นอกจากนี้ยังสามารถพบได้มากมายโดยใช้การค้นหา SO หัวข้อนี้แสดงข้อดีของ NUnit มากกว่าการทดสอบมาตรฐาน MS เช่น
ข้อได้เปรียบที่ใหญ่ที่สุด MS-Test ผ่าน NUnit คือ MS-Test สามารถสร้างวัตถุจำลองโดยใช้ Reflection ฉันพบว่ามันมีประโยชน์มาก
NUnit ทำงานร่วมกับ VS. รุ่น Standard
ฉันไม่แน่ใจว่าเป็นคนอื่น แต่ NUnit มี GUI และคอนโซลที่ดีในการเรียกใช้การทดสอบหน่วยของคุณและคุณสามารถสร้างรายงานผลของการดำเนินการทดสอบ NUnit ซึ่งจะให้รายละเอียดว่าการทดสอบล้มเหลวหรือผ่านไปแล้วและเวลาใด ทำการทดสอบหน่วยของคุณ
NUnit เป็นกรอบการทดสอบหน่วยซึ่งได้รับการสนับสนุนโดย resharper ฉันคิดว่าคุณกำลังใช้กรอบการทดสอบหน่วยของ Microsoft ดังนั้น NUnit จึงเป็นเพียงทางเลือกสำหรับผลิตภัณฑ์ของ Microsoft เท่านั้น)
นี่คือลิงค์ไปยังหน้าแรกของ NUnit: http://nunit.org
ในNUnitการทดสอบจะไม่ดำเนินการควบคู่กัน แต่ดูเหมือนว่าการทดสอบทั้งหมดจะดำเนินการในเธรดเดียว ใน MSTest การทดสอบแต่ละครั้งจะถูกสร้างอินสแตนซ์บนเธรดที่แยกจากกันซึ่งส่งผลให้การรันถูกแทรกสลับกัน ดังนั้นหากการทดสอบ A ขึ้นอยู่กับการทดสอบ B สำหรับความสำเร็จก็มีแนวโน้มที่จะล้มเหลวเนื่องจากการทดสอบ B มีแนวโน้มที่จะเริ่มทำงานเมื่อการทดสอบ A กำลังทำงานอยู่
หากคุณใช้ Visual Studio คุณต้องใช้ NUnit เพื่อทำการทดสอบหน่วยและถ้าคุณกำลังเรียกใช้ java (Netbeans) คุณต้องใช้ JUnit สำหรับการทดสอบหน่วย
นี่คือตัวอย่างสำหรับการทดสอบหน่วยเครื่องคิดเลขอย่างง่าย
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleCalculator;
using NUnit.Framework;
namespace CalculatorTest
{
[TestFixture]
public class Class1
{
public Calculator _calculator;
[TestFixtureSetUp]
public void Initialize()
{
_calculator = new Calculator();
}
[Test]
public void DivideTest()
{
int a = 10;
int b = 2;
int expectedValue = a / b;
int actualvalue = _calculator.Divide(a, b);
Assert.AreEqual(expectedValue, actualvalue,"Failure");
}
}
}