我不明白这是如何编译的。
我有一个带有以下内容的 VB.net 类:
Public Class Line
Public Enum EligibleType
skipNone = 0
skipAllow = 1
skipPay = 2
skipDeleted = 4
skipMod = 8
skipOverride = 16
End Enum
Public Function Eligible(Optional ByRef enmEligibleFlag As Line.EligibleType = Line.EligibleType.brSkipNone) As Boolean
End Class
这在应用程序中被调用了超过 9,000 次。我尝试在 C# 中为另一个函数编写测试方法,并使用 Rhino Mocks 创建类的存根。然后我将函数存根以始终返回 true。它不会编译。
[TestClass]
public class breMATest
{
/// <summary>
/// Tests the 102.
/// </summary>
[TestMethod]
public void Test102()
{
// Arrange
br target = new br();
var line = MockRepository.GenerateStub<Line>();
line.Stub(s => s.Eligible(ref Arg<Line.EligibleType>.Ref(brBD.Line.EligibleType, Line.EligibleType.skipNone).Dummy).Return(true);
// Act
target.Pay102(ref line);
// Assert
}
}
这给了我:
CS1510: A ref or out argument must be an assignable variable
UnitTestsCS\brTest.cs(35,13,35,71): error CS1502: The best overloaded method match for 'brBD.Line.Eligible(ref brBD.Line.EligibleType)' has some invalid arguments
我也试过这个,结果相同:
line.Stub(s => s.Eligible(brBD.Line.EligibleType.skipNone)).Return(true);
我尝试直接调用它,同样的错误:
line.Eligible(ref brBD.Line.EligibleType.skipNone));
我理解错误。您不能通过引用传递枚举,因为枚举是一个常量并且不能被赋值。所以我有两个问题:
- 有没有办法存根这个总是返回真?
- 为什么这在 VB.NET 中有效?
提前致谢,
蒂姆