Nunit (C#) 是否有测试局部变量?
Does Nunit (C#) have test-local variables?
我有这两个测试:
[TestFixture(Category = "MyCategory")]
public class MyTestFixture
{
private int count = 0;
[SetUp]
public void BeforeEachTest()
{
this.count++;
}
[Test]
public void AssertCountIs1_A()
{
Assert.AreEqual(1, this.count);
}
[Test]
public void AssertCountIs1_B()
{
Assert.AreEqual(1, this.count);
}
}
两个测试中的一个总是会失败,因为其中一个测试的计数为 1,而另一个测试的计数为 2。我知道这是因为 count
成员在 MyTestFixture
实例的生命周期内存在。
我可以声明我希望 count
仅在给定测试的生命周期内存在吗?例如,我可以在 count
前面加上一些属性,以便这两个测试都能成功吗?
如果没有,我可以制定一个解决方法,保留一个将测试名称映射到计数的字典。如果可以的话,我宁愿避免这种情况。
是的,NUnit 有这样的变量,或者至少 C# 有。它们称为局部变量,并在测试主体内声明。因此,它们仅在测试 运行 期间存在,并且每次都重新初始化。
能否将它们用于您的目的取决于您的目的。您的问题没有提供太多关于此的信息。我假设那是因为您已尝试 "boil down" 将问题简化为我们都能理解的问题。不幸的是,如果您过于简单化,将很难为您提供帮助。
根据评论中的扩展讨论,您可能不需要局部变量,因为您希望它们在测试的多次执行中存在。那是对的吗?更完整的问题可能会让您得到更完整的答案。
在示例代码中,如果 NUnit 配置为每次测试创建 class 的新实例,则断言会成功。 (MSTest 和 XUnit 已经这样做了)。这在 NUnit 中不可用,因此需要更新示例代码以便断言成功。这是讨论https://github.com/nunit/nunit/issues/2574
我有这两个测试:
[TestFixture(Category = "MyCategory")]
public class MyTestFixture
{
private int count = 0;
[SetUp]
public void BeforeEachTest()
{
this.count++;
}
[Test]
public void AssertCountIs1_A()
{
Assert.AreEqual(1, this.count);
}
[Test]
public void AssertCountIs1_B()
{
Assert.AreEqual(1, this.count);
}
}
两个测试中的一个总是会失败,因为其中一个测试的计数为 1,而另一个测试的计数为 2。我知道这是因为 count
成员在 MyTestFixture
实例的生命周期内存在。
我可以声明我希望 count
仅在给定测试的生命周期内存在吗?例如,我可以在 count
前面加上一些属性,以便这两个测试都能成功吗?
如果没有,我可以制定一个解决方法,保留一个将测试名称映射到计数的字典。如果可以的话,我宁愿避免这种情况。
是的,NUnit 有这样的变量,或者至少 C# 有。它们称为局部变量,并在测试主体内声明。因此,它们仅在测试 运行 期间存在,并且每次都重新初始化。
能否将它们用于您的目的取决于您的目的。您的问题没有提供太多关于此的信息。我假设那是因为您已尝试 "boil down" 将问题简化为我们都能理解的问题。不幸的是,如果您过于简单化,将很难为您提供帮助。
根据评论中的扩展讨论,您可能不需要局部变量,因为您希望它们在测试的多次执行中存在。那是对的吗?更完整的问题可能会让您得到更完整的答案。
在示例代码中,如果 NUnit 配置为每次测试创建 class 的新实例,则断言会成功。 (MSTest 和 XUnit 已经这样做了)。这在 NUnit 中不可用,因此需要更新示例代码以便断言成功。这是讨论https://github.com/nunit/nunit/issues/2574