คำถามติดแท็ก unit-testing

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

3
ใช้ Moq เพื่อจำลองวิธีอะซิงโครนัสสำหรับการทดสอบหน่วย
ฉันกำลังทดสอบวิธีการสำหรับบริการที่APIโทรผ่านเว็บ ใช้HttpClientงานปกติได้ดีสำหรับการทดสอบหน่วยถ้าฉันยังเรียกใช้บริการเว็บ (อยู่ในโครงการอื่นในการแก้ปัญหา) ในพื้นที่ อย่างไรก็ตามเมื่อฉันเช็คอินการเปลี่ยนแปลงของฉันเซิร์ฟเวอร์บิลด์จะไม่สามารถเข้าถึงบริการเว็บดังนั้นการทดสอบจะล้มเหลว ฉันได้คิดค้นวิธีนี้สำหรับการทดสอบหน่วยของฉันโดยการสร้างIHttpClientอินเทอร์เฟซและใช้เวอร์ชันที่ฉันใช้ในแอปพลิเคชันของฉัน สำหรับการทดสอบหน่วยฉันสร้างเวอร์ชันที่เยาะเย้ยโดยใช้วิธีการโพสต์แบบอะซิงโครนัสที่เยาะเย้ย ที่นี่ฉันมีปัญหา ฉันต้องการส่งคืนตกลงHttpStatusResultสำหรับการทดสอบนี้โดยเฉพาะ สำหรับการทดสอบอื่นที่คล้ายคลึงกันฉันจะคืนผลลัพธ์ที่ไม่ดี การทดสอบจะทำงาน แต่จะไม่เสร็จสมบูรณ์ มันค้างที่รอ ฉันยังใหม่กับการเขียนโปรแกรมแบบอะซิงโครนัสผู้ได้รับมอบหมายและขั้นต่ำและฉันค้นหา SO และ google มาระยะหนึ่งเพื่อเรียนรู้สิ่งใหม่ แต่ฉันก็ยังดูเหมือนจะไม่สามารถผ่านพ้นปัญหานี้ได้ นี่คือวิธีที่ฉันพยายามทดสอบ: public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email) { // do stuff try { // The test hangs here, never returning HttpResponseMessage response = await client.PostAsync(uri, content); // more logic here …

4
จำลอง HttpContext.Current ในวิธีทดสอบ Init
ฉันกำลังพยายามเพิ่มการทดสอบหน่วยในแอปพลิเคชัน ASP.NET MVC ที่ฉันสร้างขึ้น ในการทดสอบหน่วยของฉันฉันใช้รหัสต่อไปนี้: [TestMethod] public void IndexAction_Should_Return_View() { var controller = new MembershipController(); controller.SetFakeControllerContext("TestUser"); ... } ด้วยผู้ช่วยดังต่อไปนี้ในการจำลองบริบทของตัวควบคุม: public static class FakeControllerContext { public static HttpContextBase FakeHttpContext(string username) { var context = new Mock<HttpContextBase>(); context.SetupGet(ctx => ctx.Request.IsAuthenticated).Returns(!string.IsNullOrEmpty(username)); if (!string.IsNullOrEmpty(username)) context.SetupGet(ctx => ctx.User.Identity).Returns(FakeIdentity.CreateIdentity(username)); return context.Object; } public static void SetFakeControllerContext(this …

6
เหตุใดฉันจึงได้รับข้อยกเว้นพร้อมข้อความ“ ตั้งค่าไม่ถูกต้องบนสมาชิกที่ไม่ใช่เสมือน (overridable ใน VB) …”
ฉันมีการทดสอบหน่วยที่ฉันต้องจำลองวิธีการที่ไม่เสมือนจริงที่ส่งกลับประเภทบูล public class XmlCupboardAccess { public bool IsDataEntityInXmlCupboard(string dataId, out string nameInCupboard, out string refTypeInCupboard, string nameTemplate = null) { return IsDataEntityInXmlCupboard(_theDb, dataId, out nameInCupboard, out refTypeInCupboard, nameTemplate); } } ดังนั้นฉันมีวัตถุจำลองของXmlCupboardAccessคลาสและฉันพยายามตั้งค่าจำลองสำหรับวิธีการนี้ในกรณีทดสอบของฉันที่แสดงด้านล่าง [TestMethod] Public void Test() { private string temp1; private string temp2; private Mock<XmlCupboardAccess> _xmlCupboardAccess = new Mock<XmlCupboardAccess>(); _xmlCupboardAccess.Setup(x => …
176 c#  unit-testing  moq 

14
การทดสอบโมดูลใน rspec
อะไรคือแนวปฏิบัติที่ดีที่สุดสำหรับโมดูลการทดสอบใน rspec ฉันมีโมดูลบางตัวที่รวมอยู่ในรุ่นไม่กี่รุ่นและตอนนี้ฉันมีการทดสอบซ้ำกันสำหรับแต่ละรุ่น (มีความแตกต่างเล็กน้อย) มีวิธีที่จะทำให้มันแห้งหรือไม่?
175 ruby  unit-testing  rspec 

6
วิธีการพิมพ์ไปยังคอนโซลใน pytest?
ฉันพยายามที่จะใช้ TDD (ทดสอบขับเคลื่อนการพัฒนา) pytestด้วย pytestจะไม่ไปยังคอนโซลเมื่อฉันใช้printprint ฉันใช้pytest my_tests.pyเพื่อเรียกใช้ documentationดูเหมือนจะบอกว่ามันควรจะทำงานโดยค่าเริ่มต้น: http://pytest.org/latest/capture.html แต่: import myapplication as tum class TestBlogger: @classmethod def setup_class(self): self.user = "alice" self.b = tum.Blogger(self.user) print "This should be printed, but it won't be!" def test_inherit(self): assert issubclass(tum.Blogger, tum.Site) links = self.b.get_links(posts) print len(links) # This won't print either. ไม่มีสิ่งใดถูกพิมพ์ไปยังคอนโซลเอาต์พุตมาตรฐานของฉัน …

5
ฉันจะเรียกคำสั่ง Django Manage.py ที่กำหนดเองได้โดยตรงจากไดรเวอร์ทดสอบได้อย่างไร
ฉันต้องการเขียนการทดสอบหน่วยสำหรับคำสั่ง Django Manage.py ที่ทำหน้าที่แบ็คเอนด์บนตารางฐานข้อมูล ฉันจะเรียกใช้คำสั่งการจัดการโดยตรงจากรหัสได้อย่างไร ฉันไม่ต้องการรันคำสั่งบนเชลล์ของระบบปฏิบัติการจาก tests.py เพราะฉันไม่สามารถใช้สภาพแวดล้อมการทดสอบที่ตั้งค่าโดยใช้การทดสอบ Manage.py (ฐานข้อมูลทดสอบการทดสอบกล่องจดหมายออกอีเมล ฯลฯ )

7
เยาะเย้ยวิธีการขยายด้วยขั้นต่ำ
ฉันมีส่วนต่อประสานก่อนหน้า ... public interface ISomeInterface { void SomeMethod(); } และฉันได้ขยายอินเทอร์เฟซนี้โดยใช้มิกซ์อิน ... public static class SomeInterfaceExtensions { public static void AnotherMethod(this ISomeInterface someInterface) { // Implementation here } } ฉันมีคลาสที่เรียกสิ่งนี้ซึ่งฉันต้องการทดสอบ ... public class Caller { private readonly ISomeInterface someInterface; public Caller(ISomeInterface someInterface) { this.someInterface = someInterface; } public void Main() { …

30
เหตุใด Visual Studio 2015/2017/2019 นักวิ่งทดสอบจึงไม่ค้นพบการทดสอบ xUnit v2 ของฉัน
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ UPDATE: การเพิ่ม 2019; กลไกการบูรณาการการค้นพบ / นักวิ่งเหมือนกับปี 2017 และ 2015 ดังนั้นสิ่งสำคัญที่สามารถผิดพลาดได้เหมือนกัน ฉันอ่านแล้วเหตุใดนักวิ่ง xUnit จึงไม่พบการทดสอบของฉันซึ่งครอบคลุมเหตุผลที่ xUnit จะไม่สามารถหาการทดสอบของคุณได้แต่ปัญหาของฉันแตกต่างกัน - ฉันมั่นใจว่าไม่มีอะไรละเอียดเกิดขึ้นกับการทดสอบของฉัน (พวกเขาได้ทำงานในสภาพแวดล้อมอื่น ๆ นี้น่าจะเป็นเพียงแค่เครื่องของฉัน) - ของ Visual Studio ทดสอบวิ่งใน Visual Studio 2015 [Community Edition] เป็นเพียงการไม่แสดงใด ๆของการทดสอบของฉัน ฉันไม่ได้ทำอะไรที่น่าตื่นเต้นจากระยะไกล ทดสอบเป้าหมาย xUnit.net v2 บนเดสก์ท็อป ฉันดูในหน้าต่างผลลัพธ์และฉันไม่เห็นอะไรเลยในการทดสอบในส่วนแสดงผลลัพธ์จากแท็บ

30
วิธีทดสอบนั้นไม่สามารถสรุปได้: ไม่ได้ทำการทดสอบ ข้อผิดพลาด?
ฉันมีคลาสทดสอบและต่ำกว่าฉันโพสต์ตัวอย่างทดสอบจากคลาสทดสอบ namespace AdminPortal.Tests.Controller_Test.Customer { [TestClass] public class BusinessUnitControllerTests { private IBusinessUnitRepository _mockBusinessUnitRepository; private BusinessUnitController _controller; [TestInitialize] public void TestInitialize() { _mockBusinessUnitRepository = MockRepository.GenerateMock<IBusinessUnitRepository>(); _controller = new BusinessUnitController(_mockBusinessUnitRepository); } [TestCleanup] public void TestCleanup() { _mockBusinessUnitRepository = null; _controller.Dispose(); _controller = null; } #region Index Action Tests [TestMethod] public void Index_Action_Calls_GetAllBusinessUnit() { …

9
วิธีการจำลองคำร้องขอบนคอนโทรลเลอร์ใน ASP.Net MVC
ฉันมีคอนโทรลเลอร์ใน C # โดยใช้เฟรมเวิร์ก ASP.Net MVC public class HomeController:Controller{ public ActionResult Index() { if (Request.IsAjaxRequest()) { //do some ajaxy stuff } return View("Index"); } } ฉันได้รับคำแนะนำเกี่ยวกับการเยาะเย้ยและหวังว่าจะทดสอบโค้ดด้วย RhinoMocks ต่อไปนี้ var mocks = new MockRepository(); var mockedhttpContext = mocks.DynamicMock<HttpContextBase>(); var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>(); SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest); var controller = new HomeController(); controller.ControllerContext = new …

5
ASP.NET MVC: หน่วยควบคุมการทดสอบที่ใช้ UrlHelper
หนึ่งในตัวควบคุมของฉันการกระทำที่ถูกเรียกในคำขอ Ajax กำลังส่งคืน URL ไปยังฝั่งไคลเอ็นต์เพื่อให้สามารถทำการเปลี่ยนเส้นทางได้ ฉันกำลังใช้Url.RouteUrl(..)และระหว่างการทดสอบหน่วยของฉันสิ่งนี้ล้มเหลวเนื่องจากController.Urlพารามิเตอร์ไม่ได้ถูกเติมไว้ล่วงหน้า ฉันพยายามมากของสิ่งอื่น ๆ ในกลุ่มพยายามที่จะต้นขั้วUrlHelper(ซึ่งล้มเหลว) ด้วยตนเองสร้างUrlHelperด้วยRequestContextที่มี stubbed HttpContextBase(ซึ่งล้มเหลวในRouteCollection.GetUrlWithApplicationPathการโทร) ฉันค้นหาโดยใช้ Google แต่ไม่พบสิ่งใดเลยในเรื่องนี้ ฉันกำลังทำสิ่งที่โง่อย่างไม่น่าเชื่อที่ใช้Url.RouteUrlในการดำเนินการควบคุมของฉัน? มีวิธีที่ง่ายกว่านี้ไหม? เพื่อให้แย่ยิ่งขึ้นฉันต้องการทดสอบ URL ที่ส่งคืนในการทดสอบหน่วยของฉัน - ในความเป็นจริงฉันสนใจเพียงแค่รู้ว่ามันกำลังเปลี่ยนเส้นทางไปยังเส้นทางที่ถูกต้อง แต่เนื่องจากฉันคืน URL แทน เส้นทางฉันต้องการควบคุม URL ที่ได้รับการแก้ไข (เช่นโดยการใช้ stubbed RouteCollection) - แต่ฉันยินดีที่จะผ่านการทดสอบของฉันเพื่อเริ่มต้น

11
การทดสอบหน่วยบุคคลด้วย Entity Framework 6 เป็นอย่างไรคุณควรใส่ใจ
ฉันเพิ่งเริ่มด้วยการทดสอบหน่วยและ TDD โดยทั่วไป ฉันเคยขยิบตามาก่อน แต่ตอนนี้ฉันมุ่งมั่นที่จะเพิ่มลงในเวิร์กโฟลว์ของฉันและเขียนซอฟต์แวร์ที่ดีขึ้น ฉันถามคำถามเมื่อวานว่าแบบนี้รวมอยู่ด้วย แต่ดูเหมือนจะเป็นคำถามของมันเอง ฉันนั่งลงเพื่อเริ่มใช้งานคลาสบริการที่ฉันจะใช้เพื่อสรุปตรรกะทางธุรกิจจากคอนโทรลเลอร์และแผนที่ไปยังโมเดลเฉพาะและการโต้ตอบของข้อมูลโดยใช้ EF6 ปัญหาคือฉันมีสิ่งกีดขวางบนถนนแล้วเพราะฉันไม่ต้องการแยก EF ออกจากที่เก็บ (มันจะยังคงให้บริการนอกบริการสำหรับข้อความค้นหาเฉพาะ ฯลฯ ) และต้องการทดสอบบริการของฉัน (จะใช้บริบทของ EF) . ที่นี่ฉันเดาเป็นคำถามมีจุดทำเช่นนี้หรือไม่ ถ้าเป็นเช่นนั้นผู้คนกำลังทำอะไรอยู่ในป่าท่ามกลางแสงของรอยรั่วที่เกิดจาก IQueryable และการโพสต์ที่ยอดเยี่ยมมากมายของLadislav Mrnkaในเรื่องของการทดสอบหน่วยไม่ตรงไปตรงมาเพราะความแตกต่างในผู้ให้บริการ Linq เมื่อทำงานกับหน่วยความจำ การนำไปใช้งานตามที่ระบุในฐานข้อมูลเฉพาะ รหัสที่ฉันต้องการทดสอบดูเหมือนง่ายมาก (นี่เป็นเพียงรหัสจำลองเพื่อลองและเข้าใจสิ่งที่ฉันกำลังทำอยู่ฉันต้องการผลักดันการสร้างโดยใช้ TDD) บริบท public interface IContext { IDbSet<Product> Products { get; set; } IDbSet<Category> Categories { get; set; } int SaveChanges(); } …

11
การทดสอบหน่วยเป็นโมฆะวิธี?
เป็นวิธีที่ดีที่สุดในการทดสอบหน่วยวิธีที่ไม่คืนอะไร? โดยเฉพาะใน c # สิ่งที่ฉันพยายามทดสอบจริงๆคือวิธีการที่ใช้ไฟล์บันทึกและแยกวิเคราะห์สำหรับสตริงเฉพาะ สตริงจะถูกแทรกลงในฐานข้อมูล ไม่มีอะไรที่ไม่เคยทำมาก่อน แต่เป็นสิ่งใหม่สำหรับ TDD ฉันสงสัยว่ามันเป็นไปได้ที่จะทดสอบสิ่งนี้หรือเป็นสิ่งที่ไม่ได้ทำการทดสอบจริง ๆ
170 c#  unit-testing 

5
การตรวจสอบพารามิเตอร์เฉพาะด้วย Moq
public void SubmitMessagesToQueue_OneMessage_SubmitSuccessfully() { var messageServiceClientMock = new Mock<IMessageServiceClient>(); var queueableMessage = CreateSingleQueueableMessage(); var message = queueableMessage[0]; var xml = QueueableMessageAsXml(queueableMessage); messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(xml)).Verifiable(); //messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(It.IsAny<XmlElement>())).Verifiable(); var serviceProxyFactoryStub = new Mock<IMessageServiceClientFactory>(); serviceProxyFactoryStub.Setup(proxyFactory => proxyFactory.CreateProxy()).Returns(essageServiceClientMock.Object); var loggerStub = new Mock<ILogger>(); var client = new MessageClient(serviceProxyFactoryStub.Object, loggerStub.Object); client.SubmitMessagesToQueue(new List<IMessageRequestDTO> {message}); //messageServiceClientMock.Verify(proxy …
170 c#  unit-testing  nunit  moq 

1
Python จำลองค่าที่ส่งคืนหลายค่า
ฉันใช้ pythons mock.patch และต้องการเปลี่ยนค่าตอบแทนสำหรับการโทรแต่ละครั้ง นี่คือข้อแม้: ฟังก์ชันที่กำลังแก้ไขไม่มีอินพุตดังนั้นฉันจึงไม่สามารถเปลี่ยนค่าส่งคืนตามอินพุตได้ นี่คือรหัสของฉันสำหรับการอ้างอิง def get_boolean_response(): response = io.prompt('y/n').lower() while response not in ('y', 'n', 'yes', 'no'): io.echo('Not a valid input. Try again']) response = io.prompt('y/n').lower() return response in ('y', 'yes') รหัสทดสอบของฉัน: @mock.patch('io') def test_get_boolean_response(self, mock_io): #setup mock_io.prompt.return_value = ['x','y'] result = operations.get_boolean_response() #test self.assertTrue(result) self.assertEqual(mock_io.prompt.call_count, 2) …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.