【发布时间】:2011-11-14 11:39:02
【问题描述】:
我进行了一系列 NUnit 测试,但有些测试失败了,但我似乎找不到原因,异常并没有告诉我什么。这是我的情况:
//Controller Action
[HttpPost]
[AjaxExceptionHandler]
[OutputCache(Duration = 0)]
public PartialViewResult SomeAction(long id)
{
try
{
var model = _repository.GetModel(id);
return PartialView(@"MyPartialView", model);
}
catch (Exception ex)
{
exceptionManager.HandleException(ex, FT_EXCEPTION_POLICY);
throw;
}
}
//Action Unit Test
[Test]
[Category(TestConstants.UnitTest)]
public void SomeAction_Returns_Expected_View()
{
var model = Builder<ViewModel>.CreateNew().Build();
repository.Stub(it => it.GetModel(Arg<long>.Is.Anything)).Return(model);
var viewResult = (PartialViewResult)someController.SomeAction(1);
Assert.AreEqual(@"MyPartialView", viewResult.ViewName);
}
单元测试异常:
System.AccessViolationException : 试图读取或写入受保护的内存。这通常表明其他内存已损坏。
如果在我的操作中我将空值传递给部分视图,如下所示:return PartialView(@"MyPartialView", null); 那么测试通过。
其他类似案例也失败了,但其他案例通过了。我无法确定每个原因。
谁能帮我找出问题所在?
谢谢,
编辑:好的,我修复了所有其他失败的测试,现在我只剩下 System.AccessViolationException 了。
添加 我的测试中的设置过程:
[SetUp]
public void SetUp()
{
controllerBuilder = new TestControllerBuilder();
repository = MockRepository.GenerateStub<ISomeRepository>();
someController = new SomeController
(repository);
controllerBuilder.InitializeController(someController);
}
【问题讨论】:
-
如果您删除 outputchache 属性,此测试是否通过?
-
@Dvd - 具有相同属性的其他动作通过没有问题......但我会尝试......现在我只是在黑暗中拍摄,看看会发生什么。编辑:不...相同的结果。
-
只是为了确定,这个测试是在单独运行时失败还是仅在整个套件运行时失败?
-
@Lieven - 两种情况...现在我发现一些其他测试因其他原因而失败,修复后现在失败并出现同样的异常...感谢上帝的电脑不是任天堂控件,原因我的现在已经坏了……
-
让我们尝试向月球射击。你以前测试过吗?您是否对视图、绑定或资源进行了任何更改?您是否错过了附加到该 VM 的控件所需的一些资源?
标签: c# unit-testing asp.net-mvc-3 nunit