На самом деле я хочу протестировать различные варианты поведения объекта класса, который для меня не изменяется, с помощью модульного теста. Я знаю, что класс спроектирован как класс PersonData в следующем фрагменте:
namespace NotMyNamespace.Library
{
public class PersonData
{
public string Name { get; set; }
public PersonData()
{
this.Name = "Defaultname after construction";
}
private void Load()
{
this.Name = "Loaded from DataBase";
return;
}
public bool Reload()
{
this.Load();
return true;
}
}
}
Я хочу "перезаписать" метод "Обновить" с помощью прокладки, чтобы избежать получения данных из базы данных. Я просто хочу восстановить свои собственные тестовые объекты.
namespace MSFakesTest.MyTests
{
[TestFixture]
public class UnitTest
{
//preperation
private void ShimDatabaseAccess1()
{
NotMyNamespace.Library.Fakes.ShimPersonData.AllInstances.Load = (@this) =>
{
var localTestData = new PersonData()
{
Name = "Loaded from Testdata"
};
@this = localTestData;
//this is possible but i want to reassign the reference. not the values
//@this.Name = "Set as value"
};
}
[Test]
public void TestWithShim1()
{
using (ShimsContext.Create())
{
//Arrange
ShimDatabaseAccess1();
//ShimDatabaseAccess2();
var classInstance = new PersonData();
//Act
classInstance.Reload();
//Assert
Assert.That(classInstance.Name, Is.EqualTo("Loaded from Testdata"));
//but classInstance.Name is "Defaultname after construction"
}
}
}
}
Проблема уже упоминалась в комментариях
Похоже, что экземпляр "this" является клоном, а не реальным объектом, и, возможно, только переменные типа значения копируются после выходаметод.