Когда я запускаю следующие тесты в режиме Release, они оба проходят, но в режиме отладки оба они терпят неудачу.Почему возврат указателя с помощью метода приводит к отказу теста в режиме отладки?
[TestFixture]
public unsafe class WrapperTests
{
[Test]
public void should_correctly_set_the_size()
{
var wrapper = new Wrapper();
wrapper.q->size = 1;
Assert.AreEqual(1, wrapper.rep()->size); // Expected 1 But was: 0
}
[Test]
public void should_correctly_set_the_refcount()
{
var wrapper = new Wrapper();
Assert.AreEqual(1, wrapper.rep()->refcount); // Expected 1 But was:508011008
}
}
public unsafe class Wrapper
{
private Rep* q;
public Wrapper()
{
var rep = new Rep();
q = &rep;
q->refcount = 1;
}
public Rep* rep()
{
return q;
}
}
public unsafe struct Rep
{
public int refcount;
public int size;
public double* data;
}
Однако, если я удалить Rep() метод и сделать д указатель общественности, тесты проходят как в отладки и выпуска режиме.
[TestFixture]
public unsafe class WrapperTests
{
[Test]
public void should_correctly_set_the_size()
{
var wrapper = new Wrapper();
wrapper.q->size = 1;
Assert.AreEqual(1, wrapper.q->size);
}
[Test]
public void should_correctly_set_the_refcount()
{
var wrapper = new Wrapper();
Assert.AreEqual(1, wrapper.q->refcount);
}
}
public unsafe class Wrapper
{
public Rep* q;
public Wrapper()
{
var rep = new Rep();
q = &rep;
q->refcount = 1;
}
}
public unsafe struct Rep
{
public int refcount;
public int size;
public double* data;
}
Я не понимаю, что может вызвать такое поведение?
Почему сбой теста при использовании метода для возврата значения q?