C# 从TestCaseSource(NUnit)中的TestFixture访问值
让我们进行以下设置:C# 从TestCaseSource(NUnit)中的TestFixture访问值,c#,unit-testing,nunit,C#,Unit Testing,Nunit,让我们进行以下设置: [TestFixture(10)] [TestFixture(20)] public class TestClass { int I; public TestClass(int i) { I = i; } [TestCaseSource(typeof(TestSource))] public void Test(string name) { TestContext.WriteLine
[TestFixture(10)]
[TestFixture(20)]
public class TestClass
{
int I;
public TestClass(int i)
{
I = i;
}
[TestCaseSource(typeof(TestSource))]
public void Test(string name)
{
TestContext.WriteLine(name);
}
class TestSource : IEnumerable<TestCaseData>
{
public IEnumerator<TestCaseData> GetEnumerator()
{
yield return new TestCaseData("AAA") { TestName = $"Test" };
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}
[测试夹具(10)]
[附件(20)]
公共类TestClass
{
int I;
公共测试类(INTI)
{
I=I;
}
[TestCaseSource(typeof(TestSource))]
公共无效测试(字符串名称)
{
TestContext.WriteLine(名称);
}
类TestSource:IEnumerable
{
公共IEnumerator GetEnumerator()
{
返回新的TestCaseData(“AAA”){TestName=$“Test”};
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}
}
在
TestCaseSource
中生成测试时,是否有方法以某种方式获取当前TestFixture
值(10
或20
)(使用类或方法,对我来说都无所谓)?我知道我可以通过派生类或复制方法来解决这个问题,但我希望有一个干净的解决方案(在排队计划B之前)。很抱歉,这不可行:-(
首先,让我们明确一点,您的嵌套testcasesource类与NUnit没有特殊关系,因为它是嵌套的。它是独立于测试夹具类实例化的,并且工作方式与未嵌套时完全相同
以下是测试发现时的事情顺序:
在构造函数中存储参数值并从测试中访问它是“标准”解决此问题的方法。如果您想做的某件事使用该技术不起作用,最好将其解释得更清楚,以便我们可以看到是否有解决方法。谢谢。我自己通过调试和测试找到了该序列。嵌套类只是一个示例。我将以某种方式拆分它并使用两个子类要获得相同的结果,而不是使用
TestFixture
。这可能很容易修复它。