好的,所以我有以下代码,我只想运行一次。我希望它能够在我运行的所有测试工具的最初设置和最后一次设置。
[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
现在每次开始时准备初学者,然后在每次结束时结束。在如何运行该命名空间中的所有测试之前,如何才能使其成为连续的?
答案 0 :(得分:1)
您可以使用继承。您可以创建一个所有测试继承的基类,并在基类中创建您的设置。
你必须小心这样做。这将掩盖设置给任何正在查看子类的人。除非您覆盖设置,并且至少在每个班级中调用base.Setup
。
但是,这只会有助于代码重用。我不相信这会像你想要的那样工作,也不应该。对于每个测试类,此设置应该运行一次。在您的单元测试中,您不应该依赖于以前的测试,因此如果您需要这样,那么您可能需要重新查看测试。他们应该自己工作,而不需要任何先前的测试必须运行。如果你这样做,那么让每个班级设置自己的灯具应该不是问题。
解决这个问题的唯一方法就是将所有测试都放在一个夹具中,这也是不好的测试设计。
<强>更新强>
看起来您可以在将为整个程序集运行的全局类上使用SetupFixture属性。但是,如上所述,请谨慎使用,因为您通常不希望在单元测试中使用共享状态。
从上述链接中得出的值得注意的是:
在给定的命名空间中只应创建一个SetUpFixture。一个 任何命名空间之外的SetUpFixture都提供SetUp和TearDown 整个集会。
答案 1 :(得分: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();
}
}