Unit Test เตือนเรื่องพวก Concurrent / Thread ได้นะ

หลังจากหักดิบ ให้ Jenkins ถ้า Test Fail ให้ระบบตี Fail เลย มาเกือบๆ 2 ปี เรียกว่าหักดิบจริงๆแหละ เพราะคนในบริษัทไม่ค่อยเห็นด้วยเท่าไหร่ ยังเชื่อมั่นในทุกคนจะมาตรวจเองด้วยมือ และ QA ตรวจทุกรอบ

และวันนี้เจอเคสแปลกๆ เข้าตามรูปครับ

จากเคสนี้จะเห็นว่ามัน Test Fail แบบแปลกๆ ผ่านหมด / fail 1 -7 สุ่มกันไป และสุ่ม Agent ด้วย

ถ้าเราเข้ามาดูลึก มันจะเป็นเรื่องของ Concurrent / Thread ได้นะ แยกกันทำ แล้วทำงานไม่ได้ ซึ่งถ้าหากไปดูที่ Service ที่ Call Helper ตัวนี้จะพบว่า มัน Run Parallel.ForEach ครับ

Test method ds.Perf.Service.Impl.ROI.Tests.ROIEqServiceTests.T352946_ProcessDataTest threw exception: 
System.AggregateException: One or more errors occurred. 
(Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.) 
---> System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.

สำหรับเคสนี้ ต้องคุยกันครับ ว่าดูจาก Test / Spec เจ้าตัวมี Intention ยังไง แล้วเกิดการเปลี่ยนแปลงตรงนี้ Impact ขนาดไหน แล้วหาทางออกร่วมกันครับ

เห็นไหมว่า Unit Test มันช่วยเตือน แม้ว่าจะเป็นอะไรที่เล็กน้อย แต่เราต้องสังเกต ที่มัน Feedback ด้วย ไม่ใช่โยนให้เป็นหน้าที่ของใครคนนึงครับ


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.