หลังจากใช้เวลาในโครงการ TypeScript ที่ซึ่งการทดสอบมักจะวางไว้ในไฟล์ข้างรหัสที่พวกเขาทำการทดสอบผมเริ่มชอบวิธีนี้มากกว่าทำให้แยกกัน:
- มันเร็วกว่าที่จะนำทางไปยังไฟล์ทดสอบ
- เป็นการง่ายกว่าที่จะจำการเปลี่ยนชื่อการทดสอบเมื่อคุณเปลี่ยนชื่อคลาสที่กำลังทดสอบ
- จำการย้ายการทดสอบได้ง่ายขึ้นเมื่อคุณย้ายคลาสที่กำลังทดสอบ
- จะเห็นได้ชัดทันทีว่าคลาสขาดการทดสอบ
- คุณไม่จำเป็นต้องจัดการโครงสร้างไฟล์ที่ซ้ำกันสองโครงสร้างหนึ่งโครงสร้างสำหรับการทดสอบและอีกโครงสร้างหนึ่งสำหรับรหัส
ดังนั้นเมื่อฉันเริ่มโครงการ. NET Core ใหม่เมื่อเร็ว ๆ นี้ฉันต้องการดูว่าเป็นไปได้หรือไม่ที่จะเลียนแบบโครงสร้างนี้ในโครงการ C # โดยไม่ต้องส่งการทดสอบหรือชุดประกอบการทดสอบด้วยการเปิดตัวขั้นสุดท้าย
การใส่บรรทัดต่อไปนี้ในไฟล์โครงการดูเหมือนว่าจะทำงานได้ดีจนถึงตอนนี้:
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<Compile Remove="**\*.Tests.cs" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' != 'Release'">
<PackageReference Include="nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
</ItemGroup>
ข้างต้นทำให้มั่นใจได้ว่าในการRelease
กำหนดค่าไฟล์ทั้งหมดที่*.Tests.cs
มีชื่อจะถูกแยกออกจากการรวบรวมและการอ้างอิงหน่วยทดสอบแพคเกจที่จำเป็นจะถูกลบออก
หากคุณยังคงต้องการที่จะสามารถไปทดสอบหน่วยการเรียนในการกำหนดค่าการเปิดตัวของพวกเขาคุณก็สามารถสร้างการกำหนดค่าใหม่ที่ได้มาจากที่เรียกว่าสิ่งที่ต้องการRelease
ReleaseContainingTests
อัปเดต:หลังจากใช้เทคนิคนี้มาระยะหนึ่งแล้วฉันก็พบว่ามีประโยชน์ในการปรับแต่งไอคอนของคุณในรหัส VS เพื่อให้การทดสอบ (และสิ่งอื่น ๆ ) โดดเด่นขึ้นอีกเล็กน้อยในบานหน้าต่างสำรวจ:

หากต้องการทำสิ่งนี้ให้ใช้ส่วนขยายชุดไอคอนของวัสดุและเพิ่มสิ่งต่อไปนี้ในการกำหนดค่าตามความชอบรหัส VSON ของคุณ JSON:
"material-icon-theme.files.associations": {
"*.Tests.cs": "test-jsx",
"*.Mocks.cs": "merlin",
"*.Interface.cs": "yaml",
}