我对C#和nunit非常陌生。请问我这是否基本,已经在这里被问到了。
我们有一个由[SetupFixture]类定义的全局设置,该设置只能运行一次。专用变量在[设置]中定义。我们希望在所有测试夹具中使用相同的变量,从而在所有测试夹具中继承testbase类。但是,在执行Testcase1时,我观察到globalSetup()被多次调用了。谁能指出我的问题?示例代码如下。
namespace CTB
{
[SetupFixture]
public class Testbase
{
private byte val1;
private byte val2;
[setup]
public void globalSetup
{
val1 = 5;
val2 = 10;
}
[Teardown]
public void globalTeardown
{
//
}
}
}
namespace CTB.Testcase
{
public class TestCase : Testbase
{
[Setup]
public void Setup()
{
}
[Teardown]
public void Teardown()
{
}
[Test]
public void Testcase1()
{
byte val3 = val1 + val2; // Expect 15
}
}
}
我假设我的评论的答案是“否”,并且您正在使用NUnit 3的当前版本。如果我错了,请更正我。 :-)
您已经使TestBase
类具有两个功能:
这是您的TestFixture
的基类,因此它本身是TestFixture
。
它被标记为SetUpFixture
,因此它也具有该功能-顺便说一句完全不同的功能。
要清楚,您永远不要这样做。这似乎是一种旨在欺骗NUnit的“技巧”-当然不是您的意图。您的测试装置不应与任何SetUpFixture
具有继承关系。对测试夹具基座和设置夹具使用不同的类。
顺便说一句,这是正在发生的事情的长篇故事...
[OneTimeSetUp]
或'[OneTimeTearDown]`的方法。注:作为替代说明,如果您使用的是NUnit的较旧版本,则此时实际上会调用
[SetUp]
和[TearDown]
方法。当在SetUpFixture与TestFixture中遇到时,Nnit V2使用这些属性具有不同的含义。
[SetUp]
和[TearDown]
方法。当然,这些实际上与第1步中的方法相同。NUnit被欺骗这样做了!这里是对未来的一些一般性指导...
如果您希望多个灯具使用相同的数据,则基类很有用。任何公共或受保护的字段或属性都将由继承的固定装置共享。
如果要对一组[[无关]]测试治具进行一些常见的设置或拆卸,请使用SetUpFixture
。注意,将数据从SetUpFixture
传递到测试治具的唯一方法是通过静态字段或属性。通常,您使用SetUpFixture
设置要在其中运行测试的环境,而不是提供数据。
Never