C# 用VB.Net调用setter的SameAs断言
我在努尼特发现了一些奇怪的行为吗 以下VB.Net测试因以下原因失败:C# 用VB.Net调用setter的SameAs断言,c#,vb.net,nunit,C#,Vb.net,Nunit,我在努尼特发现了一些奇怪的行为吗 以下VB.Net测试因以下原因失败: Test 'SameAsTest.UseSameAs' failed: Expected string length 19 but was 29. Strings differ at index 19. Expected: "Prop1 Get,Prop1 Get" But was: "Prop1 Get,Prop1 Get,Prop1 Set" ----------------------------
Test 'SameAsTest.UseSameAs' failed:
Expected string length 19 but was 29. Strings differ at index 19.
Expected: "Prop1 Get,Prop1 Get"
But was: "Prop1 Get,Prop1 Get,Prop1 Set"
------------------------------^
SameAsTest.vb(33,0): at SameAsTest.UseSameAs()
1 passed, 1 failed, 0 skipped, took 1.80 seconds (NUnit 2.5.5).
使用系统;
使用System.Collections.Generic;
使用NUnit.Framework;
[测试夹具]
类虚拟
{
私人名单;
私有字符串mPropValue=“ThisIsIt”;
[设置]
公共作废设置()
{
CallHistory=新列表();
}
公共字符串Prop1
{
得到
{
CallHistory.Add(“Prop1 Get”);
返回mPropValue;
}
设置
{
CallHistory.Add(“Prop1集”);
mPropValue=value;
}
}
[测试]
公共无效UseSameAs()
{
断言(Prop1,Is.SameAs(Prop1));
Assert.That(String.Join(“,”,CallHistory.ToArray())是.EqualTo(“Prop1 Get,Prop1 Get”);
}
[测试]
公共无效用途名称()
{
Assert.AreName(Prop1,Prop1);
Assert.That(String.Join(“,”,CallHistory.ToArray())是.EqualTo(“Prop1 Get,Prop1 Get”);
}
}
问题实际上不是调用SameAs
。问题在于属性作为断言的第一个参数被传递。该调用
Assert.That
有许多不同的重载,事实证明,从VB到C#的重载解析方式是不同的。在C#中,属性与以下内容匹配:
Asset.That(object actual, IResolveConstraint expression);
Assert.That<Of T>(ByRef T actual, IResolveConstraint express);
在VB中,它与:
Asset.That(object actual, IResolveConstraint expression);
Assert.That<Of T>(ByRef T actual, IResolveConstraint express);
或者通过强制参数使用That
方法的预期重载
Assert.That(CType(Prop1, Object), [Is].SameAs(Prop1))
谢谢,这就解释了。
Dim prop1 = Prop1
Assert.That(prop1, [Is].SameAs(Prop1))
Assert.That(CType(Prop1, Object), [Is].SameAs(Prop1))