2015-02-26 15 views
6

मैं अपने PostMyModel मार्ग का यूनिट परीक्षण चला रहा हूं। हालांकि, PostMyModel() के भीतर मैंने अपना मॉडल बदलने के बाद Validate<MyModel>(model) लाइन का उपयोग किया। मैं एक परीक्षण संदर्भ का उपयोग कर रहा हूं, ताकि यूनिट परीक्षणों के लिए डीबी पर निर्भर न हो। मैं परीक्षण संदर्भ और नीचे पोस्ट विधि पोस्ट किया है:मान्यता यूनिट परीक्षणों में विफल रहता है

System.InvalidOperationException: ApiController.Configuration must not be null. 
:

टेस्ट प्रसंग

class TestAppContext : APIContextInterface 
    { 

     public DbSet<MyModel> MyModel { get; set; } 

     public TestAppContext() 
     { 
      this.MyModels = new TestMyModelDbSet(); 
     } 

     public int SaveChanges(){ 
      return 0; 
     } 
     public void MarkAsModified(Object item) { 

     } 

     public void Dispose() { } 

    } 

पोस्ट विधि

[Route(""), ResponseType(typeof(MyModel))] 
     public IHttpActionResult PostMyModel(MyModel model) 
     { 
      //Save model in DB 
      model.status = "Waiting"; 
      ModelState.Clear(); 
      Validate<MyModel>(model); 

      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.MyModels.Add(model); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (DbUpdateException) 
      { 
       if (MyModelExists(model.id)) 
       { 
        return Conflict(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return CreatedAtRoute("DisplayMyModel", new { id = model.id }, model); 
     } 

जब Validate<MyModel>(model) लाइन चलाता है, मैं त्रुटि मिलती है

मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

15

मान्य आदेश चलाने के लिए, नियंत्रक के साथ जुड़े नकली HttpRequest होना चाहिए। ऐसा करने के लिए कोड नीचे है। यह एक डिफ़ॉल्ट HttpRequest का नकल करेगा, जो इस मामले में काफी अप्रयुक्त है, जिससे विधि को यूनिट परीक्षण किया जा सकता है।

HttpConfiguration configuration = new HttpConfiguration(); 
      HttpRequestMessage request = new HttpRequestMessage(); 
      controller.Request = request; 
      controller.Request.Properties["MS_HttpConfiguration"] = configuration; 
+2

साथ सरल हो सकता है: controller.Request = नए HttpRequestMessage(); नियंत्रक। अनुरोध। प्रॉपर्टीज ["MS_Http कॉन्फ़िगरेशन"] = नया एचटीपी कॉन्फ़िगरेशन(); – ccook

संबंधित मुद्दे