Из прочтения вашего вопроса вы либо неправильно понимаете, что такое POCO, либо неправильно понимаете модульное тестирование.
POCO - это просто старомодный объект. У него есть состояние и поведение. Вы проводите модульное тестирование состояния, помещая (устанавливая) значения в свойства и утверждая, что значение соответствует ожидаемому. Вы тестируете поведение модуля, утверждая ожидания в отношении методов.
Вот упрощенный пример POCO и его тестов. Обратите внимание, что тестового кода больше, чем кода реализации. Когда модульное тестирование выполнено правильно (TDD), это так.
public class Person
{
private Name name = Name.Empty;
private Address address = Address.Empty;
private bool canMove;
public Name Name
{
set { name = value; }
get { return name; }
}
public Address Address
{
private set { address = value; }
get { return address; }
}
public bool CanMove
{
set { canMove = value; }
get { return value; }
}
public bool MoveToNewAddress(Address newAddress)
{
if (!CanMove) return false;
address = newAddress;
return true;
}
}
[TestFixture]
public class PersonTests
{
private Person toTest;
private readonly static Name NAME = new Name { First = "Charlie", Last = "Brown" };
private readonly static Address ADDRESS =
new Address {
Line1 = "1600 Pennsylvania Ave NW",
City = "Washington",
State = "DC",
ZipCode = "20500" };
[SetUp]
public void SetUp()
{
toTest = new Person;
}
[Test]
public void NameDefaultsToEmpty()
{
Assert.AreEqual(Name.Empty, toTest.Name);
}
[Test]
public void CanMoveDefaultsToTrue()
{
Assert.AreEqual(true, toTest.CanMove);
}
[Test]
public void AddressDefaultsToEmpty()
{
Assert.AreEqual(Address.Empty, toTest.Address);
}
[Test]
public void NameIsSet()
{
toTest.Name = NAME;
Assert.AreEqual(NAME, toTest.Name);
}
[Test]
public void CanMoveIsSet()
{
toTest.CanMove = false;
Assert.AreEqual(false, toTest.CanMove);
}
[Test]
public void AddressIsChanged()
{
Assert.IsTrue(toTest.MoveToNewAddress(ADDRESS));
Assert.AreEqual(ADDRESS, toTest.Address);
}
[Test]
public void AddressIsNotChanged()
{
toTest.CanMove = false;
Assert.IsFalse(toTest.MoveToNewAddress(ADDRESS));
Assert.AreNotEqual(ADDRESS, toTest.Address);
}
}
Чтобы сначала выполнить тест, заглушите методы или свойства, но не реализуйте никакого поведения. Запустите тесты, посмотрите, как они провалились, затем добавьте в поведение по одной строке за раз, пока она не пройдет. Как только это пройдет, остановитесь. Не пишите больше кода, если вы не пишете больше тестов (если вы не рефакторинг, в этом случае вы не добавляете поведение).