2016-08-12 17 views
6

मैं नुनिट का उपयोग करके एक यूनिट परीक्षण बना रहा हूं और यह सभी कोड रनटाइम में ठीक काम करता है।मूल्य शून्य नहीं हो सकता है। पैरामीटर नाम: अनुरोध

मेरे पास यह सुरक्षित है HttpResponseMessage कोड जो मेरे नियंत्रक द्वारा लौटाए जाने पर इसे कॉल किया जा रहा है।

हालांकि, एक त्रुटि:

"Value cannot be null. Parameter name: request" is displaying.

और जब मैं अनुरोध की जांच, यह वास्तव में null है।

प्रश्न: HttpResponseMessage वापस करने के लिए मैं अपने यूनिट परीक्षण को कैसे कोड करूं?

त्रुटि इस पंक्ति में दिखाया गया है:

protected HttpResponseMessage Created<T>(T result) => Request.CreateResponse(HttpStatusCode.Created, Envelope.Ok(result)); 

यहाँ मेरी नियंत्रक है:

[Route("employees")] 
    [HttpPost] 
    public HttpResponseMessage CreateEmployee([FromBody] CreateEmployeeModel model) 
    { 
     //**Some code here**// 

     return Created(new EmployeeModel 
     { 
      EmployeeId = employee.Id, 
      CustomerId = employee.CustomerId, 
      UserId = employee.UserId, 
      FirstName = employee.User.FirstName, 
      LastName = employee.User.LastName, 
      Email = employee.User.Email, 

      MobileNumber = employee.MobileNumber, 
      IsPrimaryContact = employee.IsPrimaryContact, 
      OnlineRoleId = RoleManager.GetOnlineRole(employee.CustomerId, employee.UserId).Id, 
      HasMultipleCompanies = EmployeeManager.HasMultipleCompanies(employee.UserId) 
     }); 
    } 

उत्तर

1

मुझे लगता है कि क्या होता है कि आप instantiating या अपने अनुरोध संपत्ति (HttpRequestMessage) बताए नहीं कर रहे हैं जब आप अपने नियंत्रक को नया करें। मेरा मानना ​​है कि आपके यूनिट टेस्ट के माध्यम से एपीआई विधि में कॉल करने से पहले अनुरोध निर्दिष्ट करना अनिवार्य है।

sut = new YourController() 
    { 
     Request = new HttpRequestMessage { 
      RequestUri = new Uri("http://www.unittests.com") }, 

     Configuration = new HttpConfiguration() 
    }; 

मुझे पता है कि अगर काम करता है:

तुम भी एक विन्यास (HttpConfiguration) की आवश्यकता हो सकती।

+0

यह मेरे लिए काम किया: MyController नियंत्रक = नए MyController() {अनुरोध = नए System.Net.Http.HttpRequestMessage() }; –

7

कारण तुम क्यों हो रही है:

An exception of type 'System.ArgumentNullException' occurred in System.Web.Http.dll but was not handled in user code Additional information: Value cannot be null.

क्योंकि Request वस्तु null है।

enter image description here

कि के लिए समाधान के रूप में अपने परीक्षण में अपने नियंत्रक का एक उदाहरण बनाने के लिए है:

var myApiController = new MyApiController 
    { 
     Request = new System.Net.Http.HttpRequestMessage(), 
     Configuration = new HttpConfiguration() 
    }; 

इस तरह, जब MyApiController वर्ग का एक नया उदाहरण बनाने हम आरंभ कर रहे हैं Request ऑब्जेक्ट। इसके अलावा, संबंधित कॉन्फ़िगरेशन ऑब्जेक्ट प्रदान करना भी आवश्यक है।

अंत में, अपने एपीआई नियंत्रक के लिए यूनिट टेस्ट का एक उदाहरण हो सकता है:

[TestClass] 
public class MyApiControllerTests 
{ 
    [TestMethod] 
    public void CreateEmployee_Returns_HttpStatusCode_Created() 
    { 
     // Arrange 
     var controller = new MyApiController 
     { 
      Request = new System.Net.Http.HttpRequestMessage(), 
      Configuration = new HttpConfiguration() 
     }; 

     var employee = new CreateEmployeeModel 
     { 
      Id = 1 
     }; 

     // Act 
     var response = controller.CreateEmployee(employee); 

     // Assert 
     Assert.AreEqual(response.StatusCode, HttpStatusCode.Created); 
    } 
} 
संबंधित मुद्दे