Nel progetto appena iniziato sto provando ad adottare
varie metodologie scoperte da quando sto seguendo UGIdotNET e, soprattutto dal
Workshop "Architecture and Management".
Ieri, primo giorno di scrittura codice, mi sono trovato a scrivere i Data
Transfer Object, che, per come è strutturato l'ambito applicativo, sono
gerarchici, cioè tutti gli oggetti ereditano da un "mainobject".
Ma come scrivere dei test per gli assegnamenti, evitando di replicare per
ogni oggetto tutti gli assegnamenti delle proprietà comuni?
Io ho trovato questa soluzione
// Classe DTO Padre
public abstract class MCObject {
private string _uuid = string.Empty;
private DateTime _data = DateTime.Now;
private DateTime _dataMod = DateTime.Now;
public string Uuid
{
get
{
return _uuid;
}
set
{
_uuid = value;
}
}
public System.DateTime Data
{
get
{
return _data;
}
set
{
_data = value;
}
}
}
// Classe DTO figlio
public class MCOTappo: MCObject
{
private string _url = string.Empty;
public string Url
{
get
{
return _url;
}
set
{
_url = value;
}
}
}
// Test dell'oggetto padre con i Test per le
// proprietà generiche
// NOTA: non è marcato [TestFixture]
public class MCObjectFixture
{
public MCObjectFixture() {}
private MCObject mco;
public MCObject MCO
{
set
{
mco=value;
}
}
[Test]
public void UuidAssignment()
{
string id = "68d6d186-c6ee-11d9-98ef-0003ba99c667";
mco.Uuid=id;
Assert.AreEqual(id, mco.Uuid);
}
[Test]
public void DataAssignment()
{
DateTime value = DateTime.Now;
mco.Data=value;
Assert.AreEqual(value, mco.Data);
}
}
// Test dell'oggetto figlio
// è marcata come [TestFixture]
// e testa solo la proprietà specifica
[TestFixture]
public class MCOTappoFixture: MCObjectFixture
{
private MCOTappo tappo;
// Nel setup creo l'oggetto da testare
// e lo passo anche al test padre
[SetUp]
public void SetUp()
{
tappo = new MCOTappo();
base.MCO=tappo;
}
[TearDown]
public void TearDown()
{
tappo = null;
}
[Test]
public void UrlAssignment()
{
string value = "http://www.ugidotnet.org";
tappo.Url=value;
Assert.AreEqual(value, tappo.Url);
}
}
powered by IMHO 1.2