在VS2010中使用MS Test ClassInitialize()和TestInitialize()而不是NUnit

在VS2010中使用MS Test ClassInitialize()和TestInitialize()而不是NUnit,nunit,mstest,Nunit,Mstest,我已经在VS2008中使用了NUnit,现在正在适应VS2010上的MSTest。我曾经能够在TestSetup()中创建一个对象,并在TestCleanup()中处理它,并且每次在NUnit中运行测试方法时都会创建该对象,从而避免在每个测试方法中重复代码 这在MSTest中是不可能的吗?我发现的使用ClassInitialize和ClassCleanup以及TestInitialize和TestCleanup属性的示例仅显示了如何写入控制台。没有显示这些属性的任何更详细的使用 下面是一个使用T

我已经在VS2008中使用了NUnit,现在正在适应VS2010上的MSTest。我曾经能够在TestSetup()中创建一个对象,并在TestCleanup()中处理它,并且每次在NUnit中运行测试方法时都会创建该对象,从而避免在每个测试方法中重复代码


这在MSTest中是不可能的吗?我发现的使用ClassInitialize和ClassCleanup以及TestInitialize和TestCleanup属性的示例仅显示了如何写入控制台。没有显示这些属性的任何更详细的使用

下面是一个使用TestInitialize和TestCleanup的简单示例

[TestClass]
public class UnitTest1
{
    private NorthwindEntities context;

    [TestInitialize]
    public void TestInitialize()
    {
        this.context = new NorthwindEntities();
    }

    [TestMethod]
    public void TestMethod1()
    {
        Assert.AreEqual(92, this.context.Customers.Count());
    }

    [TestCleanup]
    public void TestCleanup()
    {
        this.context.Dispose();
    }
}

谢谢,汤姆。假设NorthwindEntities是测试项目中的引用程序集,对吗?是的,它位于引用的程序集中。请注意,TestInitialize和TestCleanup方法必须标记为public,如图所示。另请注意:如果TestInitialize引发异常,则不会调用TestCleanup。因此,尽管上面的代码是正确的,但是在创建可能抛出的上下文之后添加任何代码都需要一个
try{…}catch{TestCleanUp();throw;}
块。