आपको एक निजी एक्सेसर जोड़ने और उपयोग करने की आवश्यकता है। अपने कंट्रोलर क्लास में राइट क्लिक करें और मेनू से Create Private Accessors
चुनें और उन्हें अपनी टेस्ट प्रोजेक्ट में जोड़ें। एक बार अपनी टेस्ट प्रोजेक्ट में, अपना कंट्रोलर बनाएं, फिर उसके लिए एक एक्सेसर बनाएं। विधि एक्सेसर पर उपलब्ध होना चाहिए।
/// <summary>
///A test for OnActionExecuting
///</summary>
[TestMethod()]
[ExpectedException(typeof(InvalidOperationException))]
public void OnActionExecutingWindowsIdentityTest()
{
var identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
var httpContext = MockRepository.GenerateStub<HttpContextBase>();
httpContext.User = principal;
var actionDescriptor = MockRepository.GenerateStub<ActionDescriptor>();
RouteData routeData = new RouteData();
BaseController controller = new BaseController();
BaseController_Accessor accessor = new BaseController_Accessor(new PrivateObject(controller));
ControllerContext controllerContext = MockRepository.GenerateStub<ControllerContext>(httpContext, routeData, controller);
ActionExecutingContext filterContext = new ActionExecutingContext(controllerContext, actionDescriptor, new Dictionary<string, object>());
accessor.OnActionExecuting(filterContext);
}
संपादित:: यहाँ अपने खुद के कोड से एक नमूना परीक्षण है कि आपको अपनी इकाई परीक्षण के लिए MSTest का उपयोग नहीं कर रहे हैं, तो आप हाथ से accessors उत्पन्न करने के लिए हो सकता है। अनिवार्य रूप से, आप एक रैपर वर्ग बनाते हैं जो समकक्ष सार्वजनिक तरीकों के माध्यम से कक्षा के निजी/संरक्षित तरीकों का परीक्षण करता है, रैपर को परीक्षण के तहत कक्षा का एक उदाहरण पास करता है, और उसके बाद रैपर वर्ग से प्रतिबिंब का उपयोग निजी/संरक्षित करने के लिए करता है परीक्षण के तहत कक्षा पर विधि।
public class MyClass
{
protected void DoSomething(int num)
{
}
}
public class MyClass_accessor
{
private MyClass privateObj;
public MyClass_accessor(MyClass obj)
{
this.privateObj = obj;
}
public void DoSomething(int num)
{
MethodInfo info = privateObj.GetType()
.GetMethod("DoSomething",
BindingFlags.NonPublic
| BindingFlags.Instance);
info.Invoke(obj,new object[] { num });
}
}
क्या यह एमएसटीएस्ट विशिष्ट है? मैं नुनिट और xunit एटीएम का उपयोग कर रहा हूँ। –
मैं केवल इसलिए पूछता हूं क्योंकि मुझे 'एड एक्सेसर' संदर्भ बटन नहीं दिख रहा है और एक Google खोज करने से मुझे कुछ एमएस परीक्षण विशिष्ट सामग्री में लाया जाता है। –
हाँ, मुझे लगता है कि यह है। मुझे लगता है कि इसके लिए कम से कम वीएस प्रो की आवश्यकता है। हालांकि आप हाथ से एक बना सकते हैं और अंतर्निहित निजी ऑब्जेक्ट पर उचित विधि का आह्वान करने के लिए प्रतिबिंब का उपयोग कर सकते हैं। – tvanfosson