TDD - 如何为 Assembly.LoadFrom(...) 的方法编写测试用例

发布于 2024-08-04 16:12:00 字数 131 浏览 1 评论 0原文

我有使用 Assembly.LoadFrom(...) 语句并从该附属程序集返回支持的区域性的方法,那么我如何为该类型的方法编写单元测试。

我所做的是,包装该静态方法/逻辑以在另一个类中返回文化并使用它的实例方法。这是正确的方法吗?

I have got method which is using Assembly.LoadFrom(...) statement and returns the supported cultures from that satellite assembly, so how could I write unit tests for that type of methods.

What I did was, wrapped that static method/logic to return cultures in anther class and used it's instance method. Is this the right approach?

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

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

发布评论

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

评论(1

诗化ㄋ丶相逢 2024-08-11 16:12:00

是这样的情况吗?

   aMethod(whatToLoad) {
          // other stuff

          x = Assembly.LoadFrom( whatToLoad );

          // code using x
  }

第一个原则:我们专注于测试 aMethod(),Assembly.LoadFrom() 的测试是一个单独的问题。当我们为 aMethod() 构建测试时,我们不会尝试测试它的依赖关系。

那么我们可能需要什么样的测试呢?

  1. 我们为 WhatToLoad 传递正确的值
  2. 我们正确存储/使用返回的值
  3. 我们正确处理从 Assembly.LoadFrom() 抛出的错误或异常

如果测试可以提供 Mock 实现,那么最容易做到这一点。然后我们可以通过检查 Mock 是否收到预期值来测试 1。测试 2 通过返回明确定义的值(或对于多个测试不同的有趣值) 测试 3 通过生成选定的错误条件。

因此,您已将代码更改为如下所示:

  aMethod(loader, whatToLoad) {
          // other code

          x = loader.Load( whatToLoad );

          // code using x
  }

也许加载的内容是以其他方式注入的,但重点是您现在可以通过设置合适的加载器来指定不同的测试。例如,对于第一次测试。

testLoader = new MockLoaderThatRembers();

tested.aMethod(testLoader, loadThis);

assertEquals(testLoader.getLoader(), loadThis);

因此,如果您正在做这种事情,那么是的,我会说您正在启用 TDD。

Is this the situation?

   aMethod(whatToLoad) {
          // other stuff

          x = Assembly.LoadFrom( whatToLoad );

          // code using x
  }

First principle: We are focusing on testing aMethod(), the testing of Assembly.LoadFrom() is a separate problem. While we are building tests for aMethod() we don't try to test its dependencies.

So here what kind of tests might we need?

  1. That we pass the right value for whatToLoad
  2. That we correctly store/use the value returned
  3. That we correctly handle errors or exceptions thrown from Assembly.LoadFrom()

It is easiest to do this if the test can supply a Mock implementation. Then we can test 1 by checking that the Mock received the expected value. Test 2 by returning a well defined value (or for mulitiple tests different interesting values) Test 3 by generating chosen error conditions.

So you have changed your code to something like this:

  aMethod(loader, whatToLoad) {
          // other code

          x = loader.Load( whatToLoad );

          // code using x
  }

Maybe the loaded is injected in some other way, but the point is that you can now specify different tests my setting up a suitable loaoder. For example, for the first test.

testLoader = new MockLoaderThatRembers();

tested.aMethod(testLoader, loadThis);

assertEquals(testLoader.getLoader(), loadThis);

So if that's the kind of thing you are doing then yes, I'd say you're enabling TDD.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文