मुझे .NET वेब एपी के साथ बहुत अधिक अनुभव नहीं है, लेकिन मैं थोड़ी देर के साथ काम कर रहा हूं, जॉन पापा के एसपीए एप्लिकेशन ट्यूटोरियल पर Pluralsight पर। एप्लिकेशन ठीक काम करता है, लेकिन जिस चीज से मैं अभी संघर्ष कर रहा हूं, यूनिट परीक्षण पोस्ट-कंट्रोलर है।यूनिट परीक्षण पोस्ट नियंत्रक .NET वेब एपी
मैंने यूनिट परीक्षण वेब एपीआई नियंत्रकों के बारे में इस अविश्वसनीय मार्गदर्शिका का पालन किया है। मेरे लिए एकमात्र समस्या तब होती है जब POST विधि का परीक्षण करने की बात आती है।
मेरे नियंत्रक इस तरह दिखता है:
[ActionName("course")]
public HttpResponseMessage Post(Course course)
{
if (course == null)
throw new HttpResponseException(HttpStatusCode.NotAcceptable);
try
{
Uow.Courses.Add(course);
Uow.commit();
}
catch (Exception)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
var response = Request.CreateResponse(HttpStatusCode.Created, course);
string uri = Url.Link(routeName: "ControllerActionAndId",
routeValues: new { id = course.Id });
response.Headers.Location = new Uri(uri);
return response;
}
और मेरी इकाई परीक्षण इस तरह दिखता है:
public static void SetupPostControllerForTest(ApiController controller)
{
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/courses/course");
var route = config.Routes.MapHttpRoute(
name: "ControllerActionAndId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" }
);
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "courses" }, { "action", "course" } });
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
}
जब मैं इकाई परीक्षण डिबग:
[Test]
public void PostShouldReturnHttpResponse()
{
var populatedPostController = new CoursesController(new TestUOW());
SetupPostControllerForTest(populatedPostController);
var course = new Course
{
Id = 12,
Author = new UserProfile()
{
Firstname = "John",
Lastname = "Johnson",
},
Description = "Testcourse",
Title = "Test Title"
};
var responses = populatedPostController.Post(course);
ObjectContent content = responses.Content as ObjectContent;
Course result = (Course)content.Value;
Assert.AreSame(result, course);
}
मदद समारोह के साथ
, ऐसा लगता है:
string uri = Url.Link(routeName: "ControllerActionAndId",
routeValues: new { id = course.Id });
response.Headers.Location = new Uri(uri); //Exception because uri = null
यह यूआरएल जैसा लगता है। लिंक मार्ग नहीं ढूंढ सकता है।
मैंने this मार्गदर्शिका को भी कोशिश की, लेकिन मैं वास्तव में उदाहरण के ऊपर काम करना चाहता हूं।
क्या मुझे यहां कुछ मूलभूत याद आ रही है?
अपने 'सेटअपपॉस्टकंट्रोलरफॉरटेस्ट विधि' नियंत्रक के अंत में निम्न पंक्ति जोड़ने का प्रयास करें। अनुरोध। प्रॉपर्टीज [एचटीपीप्रोपर्टीकीके। एचटीपीआरओटीडेटाकी] = रूटडाटा; ' – nemesv
हाँ, यह अब काम करता है! जब आप थके हुए होते हैं तो यही होता है .. धन्यवाद! –