Mam następujące metody w moim BaseApiController
zajęć:SingleResult i test jednostkowy
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)));
}
używam SingleResult
na życzenie OData (bo $expand
za pojedynczy jednostka nie działa, jeśli nie tworzę SingleResult).
Ale teraz mam problem z UnitTests tej metody na kontrolerze betonu (np. AddressApiController). Zawsze dostać NULL
w wyniku:
[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);
}
Sprawdziłem i debugowania GetById()
i dowiedzieć się, że repository.Table.Where(t => t.ID == id))
powrotną właściwą wartość, ale po SingleResult.Create
Dostaję NULL
.
Jak mogę rozwiązać ten problem? Jak mogę odczytać zawartość z SingleResult lub użyć czegoś innego?
Czy jesteś przetestować kontroler bazowy? Proszę pokazać pełniejszy przykład swojego kodu. – Andrei
Nie, testuję konkretny kontroler. Zaktualizowałem pytanie. – Marusyk
Wszystko działa poprawnie, zanim dodałem 'SingleResult.Create' – Marusyk