如何使用最小起订量模拟被测类的方法

发布于 2024-12-05 00:51:40 字数 207 浏览 0 评论 0原文

我有一个服务类想要进行单元测试。该服务调用存储库类方法来保存一些数据。但在调用 save 方法之前,我有一个属于被测服务类的 validate 方法,该方法验证要作为存储库 save 方法的参数保存的类的属性。

我知道要验证是否调用了存储库保存方法,我必须模拟存储库类并设置保存方法,但是如何验证在对该方法进行单元测试时是否调用了属于被测服务类的验证方法因为他们属于同一类而正在测试?

I have a service class that i want to unit test. The service calls a repository class method in order to save some data. But before I call the save method, I have a validate method that belongs to the service class under test which validates the properies of the class to be persisted as a parameter to the repository save method.

I know that to verify that the repository save method is called, i have to mock the repository class and set up the save method, but how do i verify that the validate method belonging to the service class under test is called when unit testing the method under test since they belong to the same class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月朦胧 2024-12-12 00:51:40

您可以通过传入使 Verify 方法报告错误的无效数据来间接测试这一点。

示例:

  • Verify 对无效值引发异常:让单元测试检查是否引发了此异常
  • Verify 返回 false 以及被测方法不会调用 Save ,因为:在存储库模拟上断言没有调用 Save

You test this indirectly by passing in invalid data that makes the Verify method to report an error.

Examples:

  • Verify throws an exception on an invalid value: Make your unit test check that this exception was thrown
  • Verify returns false and the method under test doesn't call Save because of this: Assert on your repository mock that no call to Save happened.
怪异←思 2024-12-12 00:51:40

除非您将服务类注入到其他类中,否则您不能这样做。这是您需要做的。

  1. 创建一个类,该类通过公共构造函数或公共属性获取服务类的实例。
  2. 模拟您的服务类所依赖的存储库类型,以便保存实体并将其保存在变量中。
  3. 对模拟存储库的 Save 方法设置期望。
  4. 模拟您的服务类,但将模拟的存储库注入您模拟的服务类中(通过属性或构造函数)。
  5. 设置对模拟服务类的 Validate 方法的期望。
  6. 将模拟的服务类注入到步骤 1 中创建的类中,现在如果未满足您的期望,测试将会失败。

You can't untill you inject your service class in some other class. Here is what you need to do.

  1. Create a class which takes an instance of your service class via public constructor or public property.
  2. Mock the type of repository which your service class depends on, in order to save the entity and hold it in a variable.
  3. Set up an expectation on the Save method of the mocked repo.
  4. Mock your Service class but inject the mocked repo in your mocked service class (via property or constrctor).
  5. Setup an expectation on the Validate method of the mocked service class.
  6. Inject the mocked service class in the class created in step 1 and now the test would fail if your expectation werent met.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文