Sto usando NHibernate a persistere questa entità:In che modo le proprietà protette da test unitari devono essere impostate solo da NHibernate?
public class Store
{
public int Id { get; protected set; }
public int Name { get; set; }
}
Nota come la proprietà Id
ha un setter protetto. Questo per impedire agli utenti di modificare lo Id
mentre ancora consente a NHibernate di assegnargli uno Id
quando lo salva nel database.
In uno dei miei test di unità, sto usando Moq con il seguente codice di deridere il mio repository:
var mock = new Mock<IRepository>();
mock.Setup(x => x.GetById<Store>(It.IsAny<int>()))
.Returns(new Store { Value = "Walmart" }); // can't set the ID here
var store = Repository.GetById<Store>(5);
Assert.That(store.Id == 5);
Quando dico Moq per restituire una nuova Store
esempio, non posso assegnare il ID e il test dell'unità fallisce. Come posso testare questa proprietà? Non voglio modificare il livello di accesso della proprietà perché non voglio che gli utenti lo modifichino manualmente, eppure questo è esattamente quello che devo fare qui per testarlo.
Grazie, non ho mai –
Prego, di solito uso questo con le interfacce, ma dal momento che devi già avere tutto virtuale per NHibernate, comunque, questo è un ottimo adattamento – arootbeer