NUnit TestCase无法引用实例成员

问题描述 投票:-2回答:1

我正在尝试SetUp在某些Visual Basic NUnit集成测试中使用的对象,这与我之前在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)

但是Visual Studio抱怨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 vb.net class nunit instance
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.