MSTest คัดลอกไฟล์เพื่อทดสอบเรียกใช้โฟลเดอร์


108

ฉันได้รับการทดสอบที่ต้องใช้ไฟล์ XML เพื่ออ่านและแยกวิเคราะห์ ฉันจะคัดลอกไฟล์นี้ไปไว้ในโฟลเดอร์ test run ทุกครั้งได้อย่างไร

ไฟล์ XML ถูกตั้งค่าเป็น "Copy if newer" และโหมดคอมไพล์เป็น "none" (เนื่องจากไม่ใช่สิ่งที่คอมไพล์ได้จริงๆ)

คำตอบ:


131

ใช้DeploymentItemแอตทริบิวต์

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");
        }
    }
}

17
นอกจากนี้ยังสามารถระบุแอตทริบิวต์ DeploymentItem ที่ระดับคลาสเพื่อให้มีผลต่อทุกการทดสอบในคลาส
Hannes Nel

24
อย่าลืมว่าหากคุณมีรายการของคุณในโฟลเดอร์ย่อยให้รวมสิ่งนั้นไว้ในไดเร็กทอรีย่อยการปรับใช้ [DeploymentItem ("SubFolder \ testFile1.xml", "SubFolder")]
omgtitb

31
นอกจากความคิดเห็นของ Thomas แล้วค่าเริ่มต้นสำหรับ RelativePathRoot คือโฟลเดอร์โซลูชันดังนั้นหากโซลูชันของคุณมีลักษณะเช่นนี้ (.. \ SolutionFolder \ TestProject \ TestData \ aFile.txt) DeploymentItem ของคุณจะมีลักษณะดังนี้ .. ([DeploymentItem (@ "TestProject \ TestData \ aFile.txt", "TestData")]) .. และคุณจะอ้างอิงไฟล์ในการทดสอบโดยใช้สิ่งนี้ .. (ไฟล์สตริง = @ "TestData \ aFile.txt";)
Michael Dausmann

6
เอกสาร DeploymentItemAttribute สำหรับ VS2010 : แอ็ตทริบิวต์นี้สามารถระบุบนวิธีการทดสอบหรือในคลาสทดสอบ
Alex Che

12
โพสต์ส่วนใหญ่ที่ฉันเห็นว่าไม่สามารถพูดถึงได้ก็คือหากคุณไม่สามารถใช้งานได้คุณอาจต้องเลือกช่องทำเครื่องหมาย "เปิดใช้งานการปรับใช้" ซึ่งคุณจะพบได้หากคุณไปที่การทดสอบ -> แก้ไขการตั้งค่าการทดสอบ -> local (local.testsettings) -> แท็บ Deployment ฉันเพิ่งทำสิ่งนี้แล้ว DeploymentItem ก็ทำงานได้ดี
Dave

26

ดูเหมือนว่าหากคุณจัดเตรียมไฟล์ 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 ด้วยพา ธ ที่เหมาะสม)



3

ทางออกที่ดีที่สุดสำหรับฉันคือการใช้การตั้งค่าการทดสอบโดยเฉพาะอย่างยิ่งหากการทดสอบหลายครั้งต้องการไฟล์ข้อมูลเดียวกัน

ขั้นแรกให้สร้างไฟล์ 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 ของคุณ


2

คุณสามารถกำหนด DeploymentItem ในคลาสที่เก็บเมธอดด้วยแอ็ตทริบิวต์ AssemblyInitialize จากนั้นคุณแน่ใจว่าได้คัดลอกไฟล์ไม่ว่าคุณจะทำการทดสอบใดก็ตาม

น่าเสียดายที่แอตทริบิวต์ DeploymentItem ถูกเรียกใช้เฉพาะในคลาสที่มีการทดสอบที่คุณกำลังเรียกใช้ ดังนั้นหากคุณมีคลาสทดสอบ 10 คลาสที่ใช้ไฟล์ชุดเดียวกันคุณต้องเพิ่มแอตทริบิวต์ให้กับคลาสทั้งหมด

นอกจากนี้ยังพบว่าการเปลี่ยนแปลงในไฟล์ * .testsettings จะไม่รีเฟรชโดยอัตโนมัติใน Visual Studio ดังนั้นหลังจากเพิ่มไฟล์ / โฟลเดอร์ในการปรับใช้ในการตั้งค่าการทดสอบคุณต้องเปิดไฟล์โซลูชันอีกครั้งจากนั้นเรียกใช้การทดสอบ


2

ใน Visual Studio 2012 vstest.console.exe (ตัวทดสอบในตัว) จะรันโดยมีเอาต์พุต dir เป็นพา ธ ปัจจุบัน ซึ่งหมายความว่าคุณจะต้องรวมรายการในโซลูชันของคุณด้วยคุณสมบัติ "คัดลอกเสมอ" หรือ "คัดลอกหากใหม่กว่า" เพื่อให้การทดสอบของคุณใช้ คุณไม่จำเป็นต้องมีแอตทริบิวต์ DeploymentItem สำหรับกรณีทั่วไป เช่นเดียวกับเมื่อเรียกใช้ vstest.console.exe จากบรรทัดคำสั่งภายในไดเร็กทอรีเอาต์พุต / ทดสอบของคุณ

มีบางกรณีที่มีการใช้โฟลเดอร์แยกต่างหากหนึ่งในนั้นคือเมื่อคุณใช้แอ็ตทริบิวต์ DeploymentItem ดูที่นี่สำหรับข้อมูลเพิ่มเติม

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