gpt4 book ai didi

NUnit TestCaseSource 将值传递给工厂

转载 作者:行者123 更新时间:2023-12-04 15:37:55 54 4
gpt4 key购买 nike

我正在使用 NUnit 2.5.3 TestCaseSource 属性并创建一个工厂来生成我的测试。像这样的东西:

[Test, TestCaseSource(typeof(TestCaseFactories), "VariableString")]
public void Does_Pass_Standard_Description_Tests(string text)
{
Item obj = new Item();
obj.Description = text;
}

我的来源是这样的:
public static IEnumerable<TestCaseData> VariableString
{
get
{
yield return new TestCaseData(string.Empty).Throws(typeof(PreconditionException))
.SetName("Does_Reject_Empty_Text");
yield return new TestCaseData(null).Throws(typeof(PreconditionException))
.SetName("Does_Reject_Null_Text");
yield return new TestCaseData(" ").Throws(typeof(PreconditionException))
.SetName("Does_Reject_Whitespace_Text");
}
}

我需要做的是向变量字符串添加最大长度检查,但是这个最大长度是在被测类的契约(Contract)中定义的。在我们的例子中,它是一个简单的公共(public)结构:
   public struct ItemLengths
{
public const int Description = 255;
}

我找不到任何将值传递给测试用例生成器的方法。我已经尝试过静态共享值,但这些没有被拾取。我不想将东西保存到文件中,因为每次代码更改时我都需要重新生成这个文件。

我想将以下行添加到我的测试用例中:
yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1))
.Throws(typeof(PreconditionException));

概念上相当简单的东西,但我发现不可能做的事情。有什么建议么?

最佳答案

将测试的参数更改为类而不是字符串。像这样:

公共(public)类 StringTest {
公共(public)字符串测试字符串;
公共(public) int 最大长度;
}

然后构造这个类作为参数传递给 TestCaseData 构造函数。这样你就可以传递字符串和你喜欢的任何其他参数。

另一种选择是让测试有 2 个字符串和 int 参数。

然后是 TestCaseData("mystring", 255)。您是否意识到他们可以有多个参数?

韦恩

关于NUnit TestCaseSource 将值传递给工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287829/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com