2009-07-17 18 views
6

tôi sử dụng ControllerActionInvoker để gọi hành động điều khiển hình thành đơn vị kiểm traControllerActionInvoker để gọi hành động với các thông số

var controllerInvoker = new ControllerActionInvoker(); 
var result = controllerInvoker.InvokeAction(
       testController.ControllerContext, "Default"); 

Làm thế nào để sử dụng nó để gọi một hành động mà có thông số?

[AcceptVerbs(HttpVerbs.Post)] 
[ActionException(SomeAttribute)] 
public SomeResult AddMethod(long[] Ids) 
{ 
    //some code 
} 

Trả lời

0

Từ các tài liệu có vẻ như bạn muốn sử dụng phương pháp InvokeActionMethod cho phép bạn để vượt qua các thông số trong một IDictionary như là đối số thứ ba.

ControllerContext thực sự mang theo nó dữ liệu bổ sung mà bộ điều khiển sẽ sử dụng để liên kết (bộ lọc, trình kết nối mô hình, dữ liệu tuyến đường). Đối số của bạn sẽ cần phải được chuyển qua ControllerContext.

Tôi đã tìm thấy example about unit testing controllers.

+0

CNTT là phương pháp được bảo vệ. – user99322

+0

Điểm tốt, hãy để tôi cập nhật sau khi một số nghiên cứu ... – cfeduke

+0

Liên kết đến ví dụ ở đây là liên kết chết –

1

Bạn không nên sử dụng ControllerActionInvoker từ trong các thử nghiệm đơn vị của mình. Bạn đang thực sự cố gắng làm gì?

Nếu bạn đang cố gắng kiểm tra hành vi của các hành động của mình, chỉ cần gọi trực tiếp cho họ (chúng chỉ là các phương pháp thông thường). Nếu bạn đang cố gắng kiểm tra hành vi của các bộ lọc, hãy tạo ngữ cảnh giả cho bộ lọc và gọi phương thức OnXxx() của nó.

+0

tại sao không sử dụng ControllerActionInvoker? Nó là cần thiết để kiểm tra sự tương tác giữa các thuộc tính và hành động, nếu tôi hiểu chính xác – kenwarner

+0

@qntmfred - Bởi vì bạn đang thử nghiệm cơ sở hạ tầng MVC tại thời điểm đó, đó là mã do Microsoft sở hữu. Thông thường khi đơn vị thử nghiệm các ứng dụng MVC, bạn chỉ kiểm tra mã mà bạn đã viết, và bạn làm điều này trong sự cô lập từ bất kỳ phần nào khác của cơ sở hạ tầng. Điều này cho phép bạn theo dõi các vấn đề trong cơ sở mã đó dễ dàng. Kiểm tra cơ sở hạ tầng - ví dụ: sự tương tác giữa mã của bạn và mã của bên thứ ba - thường là thử nghiệm tích hợp. Tất nhiên bạn có thể kiểm tra người chơi nếu bạn muốn, nhưng kiểm tra đơn vị có thể phá vỡ giữa các phiên bản khác nhau của MVC, và bạn có thể phát điên. :) – Levi

Các vấn đề liên quan