如果已安装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");
}
}
- 这个项目应该是一个类库,因为在控制台应用程序中它不可再现。
应启用优化,即在csproj文件中添加以下设置:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <Optimize>true</Optimize> </PropertyGroup>
当 Optimize 为 false 时,测试用例通过,但当 Optimize 为 true 时 (b2.ToString()
返回 "128"
),测试用例则失败。
使用 ReSharper 来运行测试用例或者 NUnitConsole,可以看到这种情况。但在 VS Test Explorer 中无法复现该问题。
这是怎么解释的呢?