2015-11-17 17 views
10

Ich benutze OData V4-Client, um Proxy in meinem asp.net mvc 5 zu erstellen. Ich möchte die Controller mit Moq Einheit testen. Gibt es eine Möglichkeit, die OData-Service-Antwort per Container zu verspotten? Unten ist der OData Behälter instantiator:Mock OData Client Container mit Moq

public static class ControlEntityContextHelper 
    { 
     /// <summary> 
     /// Returns OData service context 
     /// </summary> 
     /// <returns></returns> 
     public static Container GetEntityContext() 
     { 
      // create the container 
      var container = new Container(new Uri("http://localhost/services/odata/")); 
      container.Timeout = 1800; 
      return container; 
      } 
    } 

Unten ist der MVC-Controller:

public JsonResult GetEmployees(string employeeId) 
    { 
     var odataContext = ControlEntityContextHelper.GetEntityContext(); 
     var employee = odataContext.Employees.Where(emp => emp.EmployeeId == employeeId); 
     return Json(employee, JsonRequestBehavior.AllowGet); 
    } 

Jede Hilfe wird sehr geschätzt.

+3

Basierend auf dem, was Sie tun wollen "Ich möchte die Controller testen". Ich würde vorschlagen, eine weitere Ebene für Ihre Daten hinzuzufügen. Repository zum Beispiel. Laut S.O.L.I.D macht Ihr Controller zu viel Personal. – skalinkin

Antwort

2

Versuchen Sie, diese hinzuzufügen:

public interface IEmployeeRepository 
{ 
    Employee GetById(string id); 
} 

public class EmployeeRepository: IEmployeeRepository 
{ 
    public Employee GetById() {//access to OData} 
} 

Und dann Ihren Controller

ändern
public JsonResult GetEmployees(string employeeId) 
    { 
     var employee = employeeRepository.GetById(employeeId); 
     return Json(employee, JsonRequestBehavior.AllowGet); 
    } 

Dann werden Sie auf einfache Weise Ihre Data Access Layer können.

+1

Danke für Ihre Eingaben. Wir machen das eigentlich genauso, wie Sie es vorgeschlagen haben. Aber ich dachte, würde es keine Unterstützung von Moq geben, so wie wir uns über EFs DbContext und IDbSet lustig machen –