gpt4 book ai didi

c# - T4MVC 在单元测试期间抛出 TypeInitializationException——我该如何解决这个问题?

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:07 33 4
gpt4 key购买 nike

我正在向 NerdDinner 解决方案添加单元测试,并遇到了这个问题。我正在测试这里给出的 Edit POST 方法:

    [AcceptVerbs(HttpVerbs.Post), Authorize]
public virtual ActionResult Edit(int id, FormCollection formValues)
{
Dinner dinner = dinnerRepository.GetDinner( id );
if (!dinner.IsHostedBy(User.Identity.Name))
{
return View(Views.InvalidOwner);
}
try
{
UpdateModel(dinner);
dinnerRepository.Save();

//return RedirectToAction("Details", new { id = dinner.DinnerID });
return RedirectToAction(Actions.Details(dinner.DinnerID));
}
catch (Exception ex)
{
foreach (var issue in dinner.GetRuleViolations())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(new DinnerFormViewModel(dinner));
}
}

System.TypeInitializationException 在“return RedirectToAction...”行中抛出,并显示“'MVC' 的类型初始值设定项抛出异常。”

当我将 T4MVC 编码的行替换为原始行(上面已注释掉)时,我没有得到异常。

单元测试代码如下:

    [TestMethod]
public void EditAction_Should_Redirect_When_Update_Successful()
{
// Arrange
var controller = CreateDinnersControllerAs("Some User");
var formValues = new FormCollection
{
{ "Title", "Another Value" },
{ "Description", "Another Description" }
};
controller.ValueProvider = formValues.ToValueProvider();

// Act
var result = controller.Edit(1, formValues) as RedirectToRouteResult;

// Assert
Assert.IsNotNull(result);
Assert.AreEqual("Details", result.RouteValues["Action"]);
}

我有几个想法可能导致抛出此异常,但我不确定是否可以在这里提出。我完全不清楚如何修复它。

想法?

戴夫

最佳答案

MVC是由T4MVC生成的类。您看到的错误只是意味着在这个生成的 MVC 类的构造函数中抛出了一个异常(请注意,“构造函数”在这个意义上也意味着初始化任何在声明时赋值的字段)。

打开并保存 T4MVC.tt 文件以确保代码生成的文件是最新的。如果这没有帮助并且您使用的是可用的最新版本,请在生成的 MVC 类的构造函数中设置一个断点以找出中断它的原因。

关于c# - T4MVC 在单元测试期间抛出 TypeInitializationException——我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5250014/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com