gpt4 book ai didi

asp.net-mvc - 我如何对这个业务逻辑进行单元测试?

转载 作者:行者123 更新时间:2023-12-01 12:01:42 25 4
gpt4 key购买 nike

我有一个方法确实接受一个对象并将其保存到数据库中。但是,在保存对象之前,我执行以下操作...

(伪代码)

if (IsAuthenticated)
{
foo.UserId = AuthenticatedUser.Id;
}
else
{
foo.AnonEmail = "Jon@World-Domination";
foo.AnonName = "Jon Skeet";
}

try
{
_fooService.Save(foo);
}
catch
{
// Some view, with error stuff now added to
return View(...); ViewData.ModelState.
}

// all good, redirect to the proper next view.
return RedirectToAction(...);

该代码工作正常,但我不确定如何编写两个单元测试才能成功。a) 用户使用有效数据进行身份验证b) 用户未使用有效数据进行身份验证。

我不确定该怎么做的原因是,这两种情况都返回相同的 RedirectToAction(..) View 对象。所以我可以成功测试 .. 但它没有告诉我保存的对象是否包含经过身份验证的用户 ID 或匿名信息。这就像我想要第一个单元测试说

  • 起订一个经过身份验证的用户
  • 调用方法
  • 测试结果是否为 RedirectToActionView
  • 测试持久化的 foo 对象是否包含最小起订量的用户 ID。

想法?

更新

常见的建议是我模拟 fooService。我目前正在使用依赖注入(inject)和最小起订量,所以有人可以告诉我如何使用最小起订量吗?不过,我不确定 DI 在这里有多重要???

最佳答案

我会模拟 _fooService 对象,并在您的测试中测试它接收到的内容。这样,您周围的代码将保持不变并且不会受到影响,并且通过检查 _fooService 接收到的内容,您可以断言行为是否符合预期。在这种情况下,返回对象并不重要。

你如何模拟你的 _fooService ?您可以实现自己的“测试”版本(坚持与真实世界版本相同的界面),或使用模拟框架。无论您使用哪种方法,您上面的代码都需要使用 _fooService 的给定实现进行配置(通常在构建时 - 请参阅 dependency injection 以获取有关其工作原理的更多信息)

关于asp.net-mvc - 我如何对这个业务逻辑进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725608/

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