我正在使用shanselmann的MvcMockHelper类来模拟一些使用Moq的HttpContext的东西,但我有问题是能够分配的东西,我的模拟会话对象在我的MVC控制器,然后能够读取我的unit testing相同的值来validation目的。 我的问题是,如何将存储集合分配给模拟会话对象,以允许诸如session [“UserName”] =“foo”之类的代码保留“foo”值并使其在unit testing中可用。
我有一个unit testing夹具,我试图在一个ASP.NET MVC控制器上testing一个ControllerAction,这个控制器用于一个Web应用程序的成员函数。 我试图嘲笑testing的HttpContext。 被testing的ControllerAction实际上在HttpContext上设置了属性,例如Session值,Response.Cookies值等等。这不是所有的代码,但是这里是我试图运行的一个粗略的testing样本: [Test] public void ValidRegistrationDataSuccessfullyCreatesAndRegistersUser() { var context = new Mock<HttpContextBase>() {DefaultValue = DefaultValue.Mock}; context.SetupAllProperties(); var provider = new Mock<MembershipProvider>(new object[] {context.Object}); var controller = new AccountController(context.Object, provider.Object); // This just sets up a local FormCollection object with valid user data // in it to use to attempt the registration InitializeValidFormData(); […]
还是class级也可以实现抽象类呢?
所以控制器上下文取决于一些asp.net内部。 有什么方法可以干净地模拟这些unit testing? 似乎很容易阻塞testing吨设置时,我只需要,例如,Request.HttpMethod返回“GET”。 我在网上看过一些例子/帮手,但有些是过时的。 认为这将是保持最新和最好的一个好地方。 我正在使用最新版本的犀牛嘲笑
我有一个控制器在C#使用ASP.Net MVC框架 public class HomeController:Controller{ public ActionResult Index() { if (Request.IsAjaxRequest()) { //do some ajaxy stuff } return View("Index"); } } 我有一些嘲讽的技巧,并希望用以下和RhinoMockstesting代码 var mocks = new MockRepository(); var mockedhttpContext = mocks.DynamicMock<HttpContextBase>(); var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>(); SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest); var controller = new HomeController(); controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller); var result = controller.Index() as ViewResult; Assert.AreEqual("About", […]
我有一个预先存在的接口… public interface ISomeInterface { void SomeMethod(); } 我已经扩展了这个内置使用混合… public static class SomeInterfaceExtensions { public static void AnotherMethod(this ISomeInterface someInterface) { // Implementation here } } 我有一个这样的调用这个我想testing的类… public class Caller { private readonly ISomeInterface someInterface; public Caller(ISomeInterface someInterface) { this.someInterface = someInterface; } public void Main() { someInterface.AnotherMethod(); } } 和一个testing,我想嘲笑接口,并validation扩展方法的调用… [Test] public void Main_BasicCall_CallsAnotherMethod() […]
我正在编写一个testing,这个testing取决于扩展方法的结果,但是我不希望这个扩展方法的未来失败破坏这个testing。 嘲笑这个结果似乎是一个明显的select,但Moq似乎并没有提供一种重写静态方法的方法 (对扩展方法的要求)。 Moq.Protected和Moq.Stub也有类似的想法,但是似乎并没有提供这种情况。 我是否错过了一些东西,或者我应该以这种不同的方式去思考? 这是一个简单的例子,失败与通常的“对不可覆盖的成员无效的期望” 。 这是一个不好的例子,需要模拟一个扩展方法,但它应该做的。 public class SomeType { int Id { get; set; } } var ListMock = new Mock<List<SomeType>>(); ListMock.Expect(l => l.FirstOrDefault(st => st.Id == 5)) .Returns(new SomeType { Id = 5 }); 至于任何可能build议我使用隔离器的TypeMock瘾君子:我很欣赏这样的努力,因为它看起来像TypeMock可以做蒙住眼睛和醉酒的工作,但我们的预算不会很快增加。