ฉันได้รับการทดสอบที่ต้องใช้ไฟล์ XML เพื่ออ่านและแยกวิเคราะห์ ฉันจะคัดลอกไฟล์นี้ไปไว้ในโฟลเดอร์ test run ทุกครั้งได้อย่างไร
ไฟล์ XML ถูกตั้งค่าเป็น "Copy if newer" และโหมดคอมไพล์เป็น "none" (เนื่องจากไม่ใช่สิ่งที่คอมไพล์ได้จริงๆ)
ฉันได้รับการทดสอบที่ต้องใช้ไฟล์ XML เพื่ออ่านและแยกวิเคราะห์ ฉันจะคัดลอกไฟล์นี้ไปไว้ในโฟลเดอร์ test run ทุกครั้งได้อย่างไร
ไฟล์ XML ถูกตั้งค่าเป็น "Copy if newer" และโหมดคอมไพล์เป็น "none" (เนื่องจากไม่ใช่สิ่งที่คอมไพล์ได้จริงๆ)
คำตอบ:
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;
namespace DeploymentTest
{
[TestClass]
public class UnitTest1
{
[TestMethod()]
[DeploymentItem("testFile1.xml")]
public void ConstructorTest()
{
string file = "testFile1.xml";
Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
" did not get deployed");
}
}
}
ดูเหมือนว่าหากคุณจัดเตรียมไฟล์ TestSettings สำหรับโซลูชันคุณสามารถยกเลิกการเลือกตัวเลือก "เปิดใช้งานการปรับใช้" และหยุด mstest จากการพยายามเรียกใช้จาก...TestResults\...\out
โฟลเดอร์ที่ไม่ได้คัดลอกไฟล์พิเศษของคุณ (เว้นแต่คุณจะทำให้เป็นตัวเลือกการปรับใช้) .
นอกจากนี้ยังมีประโยชน์หากคุณต้องพึ่งพาไฟล์พิเศษที่อยู่ในโครงสร้างโฟลเดอร์ที่เก็บรักษาไว้เนื่องจากรายการ Deployment ดูเหมือนจะถูกคัดลอกโดยตรง (แบน) ลงในโฟลเดอร์ที่เรียกใช้ชั่วคราว (ออก) หากคุณใช้ตัวเลือก Deployment, Add Folder ใน TestSettings ( คำตอบข้างต้นแนะนำให้คุณเก็บโครงสร้างไว้หากคุณเพิ่มแต่ละรายการเป็น DeploymentItem ของตัวเอง)
สำหรับฉันมันทำงานได้ดีในการทดสอบการทำงานโดยตรงใน Visual Studio (เช่นไฟล์พิเศษของฉันในโครงสร้างถูกพบและใช้โดยการทดสอบ) เพราะฉันได้สร้างไฟล์ TestSettings ด้วยเหตุผลอื่นเมื่อนานมาแล้ว (ซึ่งไม่ได้เลือกเปิดใช้งานการปรับใช้) แต่ไม่ใช่เมื่อ TeamCity เรียกใช้ mstest เพื่อเรียกใช้การทดสอบเนื่องจากฉันไม่ได้ระบุว่าควรใช้ไฟล์ TestSettings
ในการสร้างไฟล์ TestSettings ใน Visual Studio ให้คลิกขวาที่โซลูชันและเลือกรายการใหม่และเลือกเทมเพลต TestSettings ในการใช้ไฟล์ TestSettings ที่พรอมต์คำสั่งของ mstest.exe ให้เพิ่มตัวเลือก/testsettings:C:\Src\mySolution\myProject\local.testsettings
(หรือเพิ่มเป็นตัวเลือกบรรทัดคำสั่งเพิ่มเติมใน TeamCity ด้วยพา ธ ที่เหมาะสม)
คำตอบ Preet ใช้เพื่อปรับใช้รายการสำหรับการทดสอบเดียว ถ้าคุณต้องการทำในระดับโซลูชันให้ใช้การตั้งค่า . testrunconfig
ทางออกที่ดีที่สุดสำหรับฉันคือการใช้การตั้งค่าการทดสอบโดยเฉพาะอย่างยิ่งหากการทดสอบหลายครั้งต้องการไฟล์ข้อมูลเดียวกัน
ขั้นแรกให้สร้างไฟล์ testsettings และเพิ่มรายการการปรับใช้ที่คุณต้องการ (ชื่อไฟล์หรือโฟลเดอร์):
<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are default test settings for a local test run.</Description>
<Deployment>
<DeploymentItem filename="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/>
<DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/>
</Deployment>
<...../>
ทำงานในวิชวลสตูดิโอใช้ "เลือกไฟล์การตั้งค่าการทดสอบ" จากเมนู "ทดสอบ \ ทดสอบการตั้งค่า" เพื่อเลือกการตั้งค่าการทดสอบใหม่
เรียกใช้ mstest ใช้พารามิเตอร์ / testsettings เพื่อให้ mstest ใช้ testsettings ของคุณ
คุณสามารถกำหนด DeploymentItem ในคลาสที่เก็บเมธอดด้วยแอ็ตทริบิวต์ AssemblyInitialize จากนั้นคุณแน่ใจว่าได้คัดลอกไฟล์ไม่ว่าคุณจะทำการทดสอบใดก็ตาม
น่าเสียดายที่แอตทริบิวต์ DeploymentItem ถูกเรียกใช้เฉพาะในคลาสที่มีการทดสอบที่คุณกำลังเรียกใช้ ดังนั้นหากคุณมีคลาสทดสอบ 10 คลาสที่ใช้ไฟล์ชุดเดียวกันคุณต้องเพิ่มแอตทริบิวต์ให้กับคลาสทั้งหมด
นอกจากนี้ยังพบว่าการเปลี่ยนแปลงในไฟล์ * .testsettings จะไม่รีเฟรชโดยอัตโนมัติใน Visual Studio ดังนั้นหลังจากเพิ่มไฟล์ / โฟลเดอร์ในการปรับใช้ในการตั้งค่าการทดสอบคุณต้องเปิดไฟล์โซลูชันอีกครั้งจากนั้นเรียกใช้การทดสอบ
ใน Visual Studio 2012 vstest.console.exe (ตัวทดสอบในตัว) จะรันโดยมีเอาต์พุต dir เป็นพา ธ ปัจจุบัน ซึ่งหมายความว่าคุณจะต้องรวมรายการในโซลูชันของคุณด้วยคุณสมบัติ "คัดลอกเสมอ" หรือ "คัดลอกหากใหม่กว่า" เพื่อให้การทดสอบของคุณใช้ คุณไม่จำเป็นต้องมีแอตทริบิวต์ DeploymentItem สำหรับกรณีทั่วไป เช่นเดียวกับเมื่อเรียกใช้ vstest.console.exe จากบรรทัดคำสั่งภายในไดเร็กทอรีเอาต์พุต / ทดสอบของคุณ
มีบางกรณีที่มีการใช้โฟลเดอร์แยกต่างหากหนึ่งในนั้นคือเมื่อคุณใช้แอ็ตทริบิวต์ DeploymentItem ดูที่นี่สำหรับข้อมูลเพิ่มเติม