1

好的,所以我有以下代码,我只想运行一次。我希望它在我运行的所有测试装置的一开始就设置,最后设置一次。

 [RequiresSTA]
    class Prepare
    {
        [TestFixtureSetUp]
        public void Setup()
        {
            IE Window = new IE("http://www.google.com");
        }

        [TestFixtureTearDown]
        public void Teardown()
        {
            IE Window = IE.AttachTo<IE>(Find.ByTitle("Google"));
            Window.Dispose();
        }
    }

我的项目中有多个类在同一个命名空间中,我们称它们为 Class1-4。我想设置它,所以当我运行这些测试时, Prepare 只会被调用一次。例子:

运行 3 + 4:

Prepare Setup
     Run3
     Run4
Prepare Teardown

运行 1 - 4:

Prepare Setup
     Run1
     Run2
     Run3
     Run4
Prepare Teardown

现在准备在每次一组开始时启动,然后在每次结束时结束。在运行该名称空间中的所有测试之前,我怎样才能让它继续?

4

2 回答 2

1

您可以为此使用继承。您可以创建一个所有测试都继承自的基类,并在基类中放置您的设置。

但是,您必须小心执行此操作。这将对只查看子类的任何人屏蔽设置。除非您覆盖设置并至少base.Setup在每个课程中调用。

但是,这只会有助于代码重用。我不相信这会如你所愿,也不应该。此设置应该为每个测试类运行一次。在你的单元测试中,你不应该依赖于以前的测试,所以如果你需要这个,那么你可能想要重新查看你的测试。他们应该自己工作,而不必运行任何先前的测试。如果你这样做了,那么让每个班级设置自己的夹具应该不是问题。

解决这个问题的唯一方法是将所有测试放在一个夹具中,这又是糟糕的测试设计。

更新

看来您可以在将为整个程序集运行的全局类上使用SetupFixture属性。但是,如上所述,请非常小心地使用它,因为您通常不希望在单元测试中共享状态。

从上面的链接中值得注意的是:

在给定的命名空间中只能创建一个 SetUpFixture。任何命名空间之外的 SetUpFixture 为整个程序集提供 SetUp 和 TearDown。

于 2012-04-19T13:20:10.277 回答
1

创建一个装配设置夹具将是最好的方法。

    //This class does not have a namespace on purpose, do not add one.
  [SetUpFixture]
  public class AssemblySetupFixture
  {
    [SetUp]
    public void SetupTestSuite()
    {
        Debug.WriteLine("Setting up Test Assembly Fixture");
     // Kill all web server instances and then restart them
        WebServerHelper.StopAll(); 
        WebServerHelper.StartAll();
       DatabaseHelper.RestoreDefaultDatabases();
     }

    [TearDown]
    public void TearDownTestSuite()
    {
        Debug.WriteLine("Tearing down Assembly Fixture");
        WebServerHelper.StopAll();
    }
  }
于 2012-05-01T15:35:32.617 回答