Проблема может быть воспроизведена с помощью следующего примера кода, с установленным 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 является ложным, но он терпит неудачу, когда Optimize истинно (b2.ToString()
дает "128"
).
Это можно увидеть с помощью ReSharper для запуска теста или NUnitConsole, не воспроизводимого с помощью VS Test Explorer.
Как это можно объяснить?