La ce foloseste StructureMap ? Raspunsul pe scurt : este un tool simplu de DI
Raspunsul pe lung : in postul precedent, vroiam sa testez un export de fisiere fara sa ating BD.
Initial, codul arata cam asa :
public ActionResult ExportDate(string id)
{
DateExport fe = new DateExport();
fe.id = id;
export exp = new export(Server.MapPath("~/bin/Templates"));
FileContentResult fcr = new FileContentResult(exp.Export(fe), "application/ms-word");
fcr.FileDownloadName = fe.Number + ".doc";
return fcr;
}
unde variabila fe din
DateExport fe = new DateExport();
atingea BD in momentul in care cineva ii cerea niste date.
Vroiam sa o inlocuiesc cu o variabila ce trimite null ca date si apoi cu variabila care trimite niste date fake.
Ca sa fac acest lucru, am extras metodele care ma interesau din DateExport, am facut o interfata din ele IDateExport, am inlocuit vparametrul din functia export ce cerea un DateExport cu IDateExport si am folosit StructureMap :
In global.asax am definit cererea default :
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IDateExport>().TheDefault.Is.ConstructedBy(() => new DateExport(HttpContext.Current.User.Identity.Name));
});
si apoi in metoda am inlocuit new cu ObjectFactory :
public ActionResult ExportDate(string id)
{
IDateExport fe = ObjectFactory.GetInstance<IDateExport>();
fe.id = id;
export exp = new export(Server.MapPath("~/bin/Templates"));
FileContentResult fcr = new FileContentResult(exp.Export(fe), "application/ms-word");
fcr.FileDownloadName = fe.Number + ".doc";
return fcr;
}
Acum testul automat a devenit floare la ureche – sa zicem ca vreau ca metodele din IDataExport sa nu aduca nimic –si sa testez acest lucru . Creez o clasa DataExportNotFind, implementez IDataExport ca sa nu aduca nimic si scriu in test :
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IDataExport>().TheDefaultIsConcreteType<DataExportNotFind>();
});
Si asta e tot!
As vrea sa pun accent pe faptul ca , desi testez rapid pe masina proprie facind un fake la BD, totusi, la integrare, ar trebui sa aveti teste cu BLL / UI care sa testeze NEAPARAT cu BD …