我正试图为Asp.Net核心Web API的ModelState验证编写单元测试。
我读到,最好的方法是使用TryValidateModel
函数。但是,每次我运行单元测试时,它都会引发 NullReference 异常。
我发现很多文章建议控制器。ModelState.AddModelError(“”,“”)
,但我对此不感兴趣,因为我相信它击败了真实模型验证的实际目的。
[TestMethod]
public void TestMethod1()
{
var controller = new TestController();
controller.Post(new Model());
}
public class TestController : Controller
{
public IActionResult Post(Model model)
{
bool b = TryValidateModel(model)
return Ok();
}
}
TryValidateModel(模型)
总是从TryValidateModel(模型,前缀)
函数抛出Null参考异常。
感谢任何帮助。
基于Andrew Van Den Brink的答案,但实际上在ModelState中设置了验证错误。
private class ObjectValidator : IObjectModelValidator
{
public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model)
{
var context = new ValidationContext(model, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(
model, context, results,
validateAllProperties: true
);
if (!isValid)
results.ForEach((r) =>
{
// Add validation errors to the ModelState
actionContext.ModelState.AddModelError("", r.ErrorMessage);
});
}
}
然后,只需在控制器中设置ObjectValidator:
controller.ObjectValidator = new ObjectValidator();
由于@Egorikas,当我发现如何修复空引用异常时,我注意到它仍然无法实际验证模型,并且总是返回true。
我发现我们可以只在System. ComponentModel. DataAnnoations
命名空间中使用Validator
类。
[TestMethod]
public void TestMethod1()
{
var model = new Person();
var validationResultList = new List<ValidationResult>();
bool b1 = Validator.TryValidateObject(model, new ValidationContext(model), validationResultList);
}
如果ModelState验证是您的意图,您可以直接从Test方法本身验证它,而不必调用控制器。
希望这有所帮助。
这是配置/集成问题。
您可以在ASP.NET Core repo和github上看到该问题中的一些附加信息。但我可以告诉你最简单的方法(我用过一次)
var objectValidator = new Mock<IObjectModelValidator>();
objectValidator.Setup(o => o.Validate(It.IsAny<ActionContext>(),
It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(),
It.IsAny<Object>()));
controller.ObjectValidator = objectValidator.Object;
但这无济于事,仍然令人崩溃。 我在考虑make try{}catch返回500,并在每个过滤器中进行某种日志记录,但这将导致大量的重复。 有什么办法可以在全球范围内处理吗? MVC服务的添加方式如下:
所以,我需要运行这个单元测试。 服务接口: 所以当我运行这个测试时,它会抛出一个异常,实际上不会在这里断言测试。 我在的顶部添加了,它扩展了 在第二个测试用例中,我得到了空的响应。我试过这个API vis Postman,得到了回复。那里一切正常。 控制器内容: 测试等级: 我错过了什么?
我正在使用ASP.Net核心开发一个网络应用编程接口。我正在对我的项目进行集成测试。我点击这个链接,https://koukia.ca/integration-testing-in-asp-net-core-2-0-51d14ede3968.这是我的代码。 我有控制器要在古德.api项目中进行测试。 我在解决方案中添加了一个名为thegoodyard.tests的新单元测试项目。我添加了一个具有以
问题内容: 我编写了一个转换器类,该类使用并将其转换为另一个类型,该类型包含指向Servlet请求的InputStream的指针。(其想法是从请求处理中抽象传入的传输协议,因此,例如,我也可以从FTP编写类似的转换器。) 现在,我正在尝试为此编写单元测试,但遇到了问题。我设法找出正确的样板来创建一个有效的Multipart HTTP请求(使用Spring类和),但是现在我在类的方法中得到了。我猜的
我正在尝试通过Maven运行cucumber+testng+selenium。 当我在Eclipse中通过TestNG测试运行它时,它工作得很好,但当我使用mvn测试时,它会抛出空指针异常 我是不是漏掉了什么?
我正在尝试将ASP.NET MVC webform迁移到ASP.NET核心MVC。当前,类遇到问题。 原来的行是: 但是,对于ASP.NET核心,UrlReferrer不可用。我发现了以下内容: 它返回StringValues而不是String。我不确定我是否应该尝试使用这一个,或者是否有任何其他解决办法来解决这种情况。也不可用,或者我没有该命名空间。我的命名空间如下: 如果有人能指引我正确的方向
在我的asp.net核心项目(与2017年相比)中,我想运行我的测试方法,但在测试资源管理器中单击“运行所有”,我在测试资源管理器控制台中得到“最后一次测试运行不运行(总运行时间“布拉布拉”)”响应。我已经下载了我的NunitNuGet包。我认为在我的启动类或其他地方asp.net核心中测试有一些缺失的测试配置,或者一些缺失的NuGet包:/Thx提前给每个人。 这是我的测试课: 下面是我的“Gu