Structure Map

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 …

Leave a Reply

Your email address will not be published. Required fields are marked *