DeploymentItemAttribute Class

Used to specify deployment items such as files or directories for per-test deployment. This class cannot be inherited.

Namespace:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.SmartDevice.UnitTestFramework (in Microsoft.VisualStudio.SmartDevice.UnitTestFramework.dll)

Syntax

'Declaration
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple := True)> _
Public NotInheritable Class DeploymentItemAttribute _
    Inherits Attribute
'Usage
Dim instance As DeploymentItemAttribute
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = true)]
public sealed class DeploymentItemAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Method, AllowMultiple = true)]
public ref class DeploymentItemAttribute sealed : public Attribute
public final class DeploymentItemAttribute extends Attribute

Remarks

Depending on your test run configuration settings, Visual Studio Team System 2008 Test Edition runs tests either in the folder in which you have created them or in a separate "deployment" folder. For more information about how to make test run settings, see How to: Configure Test Deployment.

This section discusses the case in which Visual Studio Team System 2008 Test Edition runs tests in a different folder than the folder that holds the built assemblies.

When a test is run in this manner, the test and code-under-test assemblies, and the deployment items are placed in a test deployment folder unique to that test run. This attribute identifies files and directories that contain files that are used by the deployed test to run. The test engine makes a copy of the deployment items and places them in test deployment directory based on the OutputDirectory specified or the default directory. For more information, see Test Deployment.

This attribute can be specified on a test method or on a test class. However, this attribute is not inherited by derived classes.

There can be multiple instances of this attribute to specify more than one item. The item path can be absolute or relative. Relative paths are relative to the project path.

The following examples demonstrate different usage of the DeploymentItemAttribute:

  • [DeploymentItem("file1.xml")]   Deploys an item named file1.xml located at the project path. The file is deployed to the deployment root directory.

  • [DeploymentItem("file2.xml", "DataFiles")]   Deploys an item named file2.xml located at the project path. The file is deployed to the DataFiles subdirectory of the deployment root directory.

  • [DeploymentItem("C:\\MyDataFiles\\")]   Deploys all items and directories found within the MyDataFiles directory. This does not create the MyDataFiles directory underneath the deployment directory. All files and directories within MyDataFiles will be deployed to the deployment root directory. To copy the entire MyDataFiles directory structure, you must specify MyDataFiles as an output directory.

  • [DeploymentItem("%myDir%\myFile.txt")]   Deploys the file myFile.txt if that file exists in the directory to which %myDir% resolves.

For more information about how to use attributes, see Extending Metadata Using Attributes.

Examples

The following class creates a file that will be used by the test method.

using System;
using System.IO;

namespace CarMaker
{
    public class Car
    {
        private static string make = "myMake";
        private static string model = "myModel";

        public static void CarInfo()
        {
            using (StreamWriter sw = new StreamWriter("testFile1.txt"))
            {
                sw.WriteLine(make);
                sw.WriteLine(model);
            }
        }
    }
}
Imports System
Imports System.IO

Namespace CarMaker
    Public Class Car

        Private Shared make As String = "myMake"
        Private Shared model As String = "myModel"

        Public Shared Sub CarInfo()
            Dim sw As New StreamWriter("testFile1.txt")
            Try
                sw.WriteLine(make)
                sw.WriteLine(model)
            Finally
                sw.Close()
            End Try
        End Sub
    End Class
End Namespace

The following test class contains a test method that will instantiate the Car class which will create a file that is named "testFile1.txt". This file will be deployed as identified in the DeploymentItemAttribute. Then, the test method will test if the file exists in the same directory as the test assembly.

using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;

namespace DeploymentTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        [DeploymentItem("testFile1.txt")]
        public void ConstructorTest()
        {
            // Create the file to deploy
            Car.CarInfo();
            string file = "testFile1.txt";
            // Check if the created file exists in the deployment directory
            Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                " did not get deployed");
        }
    }
}
Imports System
Imports System.IO
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports MyVBProject.CarMaker

Namespace DeploymentTest
    <TestClass()> _
    Public Class UnitTest1
        <TestMethod()> _
        <DeploymentItem("testFile1.txt")> _
        Sub ConstructorTest()
            Car.CarInfo()
            Dim file As String = "testFile1.txt"
            Assert.IsTrue(IO.File.Exists(file), "deployment failed: " + file + _
                " did not get deployed")
        End Sub
    End Class
End Namespace

Inheritance Hierarchy

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

Reference

DeploymentItemAttribute Members

Microsoft.VisualStudio.TestTools.UnitTesting Namespace

Other Resources

How to: Configure Test Deployment