NUnit TestCase无法引用实例成员



我正在尝试SetUp一个对象,以便在某些Visual BasicNUnit集成测试中使用,类似于我以前在C#中所做的操作。

Public Class ApprovalLevelTests
Private myLevel As ApprovalLevel= Nothing
<SetUp>
Public Function Setup()
myLevel = ApprovalLevel.GetApprovalLevel(1, "414", "MKRT")
End Function
Public Sub TearDown()
End Sub
<TestCase(myLevel.Basic, "<=$1,000")>
<TestCase(myLevel.Middle, "$1,000-$5,000")>
Public Sub AutoApprovalRange_ValidRanges_ReturnsTrue(ByVal approvalRange As String, ByVal limit As String)

但是VisualStudio抱怨说myLevel不能在测试用例中使用,因为您不能从共享方法或共享成员初始值设定项中引用类的实例成员。我有点困惑,因为我试图通过传递字符串文字来实现这一点,但它仍然感到不安。如果我这样做,没问题。

Public Sub AutoApprovalRange_ValidRanges_ReturnsTrue()
ApprovalLevel level = ApprovalLevel.GetApprovalLevel(1, "414", "MKRT");
Assert.IsTrue(level.Basic == "(Limit: <=$1,000)");
Assert.IsTrue(level.Middle == "(Limit: $1,000-$5,000)");

我有什么不明白的?

您可能已经知道,在尖括号中提供的描述是.NET属性。这是单元测试机器用来识别和配置测试的一个通用特性。属性实际上是Shared,因为它们是所有类中例程的一个属性。事实上,它们不仅仅是Shared,因为它们是程序集中语言项的属性。

因此,关于属性的C#文档明确指出,属性参数必须是编译时常数。您可以在这里找到C#文档:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/attributes

我在VB的属性文档中没有找到任何等价的东西,但我认为这不会是特定于语言的。这是关于属性是什么以及编译器如何处理它们的自然结论。

相关内容

最新更新