使用安装了NUnit 3的以下代码示例可以重现该问题.
[TestFixture]
public class SByteFixture
{
[Test]
public void Test()
{
var data = new byte[] { 0xFF };
sbyte x = -128;
data[0] = (byte) x;
byte b1 = data[0];
var b2 = (sbyte) b1;
Assert.AreEqual(b1.ToString(), "128");
Assert.AreEqual(b2.ToString(), "-128");
}
}
Run Code Online (Sandbox Code Playgroud)
应该启用优化,即csproj文件中的以下设置:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Optimize>true</Optimize>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)当Optimize为false时,测试通过,但当Optimize为true(给出)时,测试失败.b2.ToString()"128"
使用ReSharper运行测试或NUnitConsole可以看到这一点,使用VS Test Explorer无法重现.
怎么解释这个?
正如 @HansPassant 所建议的,我已经在GitHub上报告了这个问题,它似乎是一个已确认的错误。
这是来自mikedn的关于这个问题的引用
事实上,您可以在类库而不是控制台应用程序中进行重现,这可能意味着您使用的是 .NET Framework 而不是 .NET Core。在 .NET Framework 控制台应用程序默认为 32 位,因此它们使用旧版 JIT32,而不是 RyuJIT。64 位 .NET Framework 应用程序使用 RyuJIT,但它通常比 .NET Core 使用的版本旧。
我可以使用 64 位 .NET Framework 4.7.2 重现此问题,但不能使用当前的 .NET Core 主版本。它可以使用 .NET Core 2.1 进行重现,因此很可能该问题已在 master 中修复。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |