Ho la seguente metodo nella mia classe BaseApiController
:SingleResult e unit testing
public virtual HttpResponseMessage GetById(int id)
{
var entity = repository.GetById(id);
if (entity == null)
{
var message = string.Format("No {0} with ID = {1}", GenericTypeName, id);
return ErrorMsg(HttpStatusCode.NotFound, message);
}
return Request.CreateResponse(HttpStatusCode.OK, SingleResult.Create(repository.Table.Where(t => t.ID == id)));
}
sto usando SingleResult
per la richiesta OData (perché $expand
per la singola entità non funziona se non creo SingleResult).
Ma ora ho problemi con UnitTests di questo metodo su controller concreto (ad esempio AddressApiController). Ho sempre trovato NULL
nel totale:
[TestMethod]
public void Get_By_Id()
{
//Arrange
var moq = CreateMockRepository();
var controller = new AddressApiController(moq);
controller.Request = new HttpRequestMessage()
controller.Request.SetConfiguration(new HttpConfiguration())
// Action
HttpResponseMessage response = controller.GetById(1);
var result = response.Content.ReadAsAsync<T>().Result;
// Accert
Assert.IsNotNull(result);
}
ho controllato ed eseguire il debug GetById()
e scopro che repository.Table.Where(t => t.ID == id))
ritorno valore appropriato, ma dopo SingleResult.Create
sto ottenendo NULL
.
Come posso risolvere questo problema? Come posso leggere il contenuto da SingleResult o usare qualcos'altro?
si fa a testare controller di base? Si prega di mostrare più pieno esempio del tuo codice. – Andrei
No, sto testando il controller concreto. Ho aggiornato la domanda. – Marusyk
Tutto funziona correttamente prima di aggiungere 'SingleResult.Create' – Marusyk