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

TDD—如何为作为Assembly.LoadFrom(…)的方法编写测试用例,tdd,nunit,Tdd,Nunit,我得到了一个使用Assembly.LoadFrom(…)语句的方法,并从附属程序集中返回支持的区域性,那么我如何为这种类型的方法编写单元测试呢 我所做的是,包装静态方法/逻辑,在另一个类中返回文化,并使用它的实例方法。这是正确的方法吗?是这种情况吗 aMethod(whatToLoad) { // other stuff x = Assembly.LoadFrom( whatToLoad ); // code using x

我得到了一个使用Assembly.LoadFrom(…)语句的方法,并从附属程序集中返回支持的区域性,那么我如何为这种类型的方法编写单元测试呢

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

是这种情况吗

   aMethod(whatToLoad) {
          // other stuff

          x = Assembly.LoadFrom( whatToLoad );

          // code using x
  }
第一个原则:我们将重点测试aMethod(),Assembly.LoadFrom()的测试是一个单独的问题。当我们为aMethod()构建测试时,我们不会尝试测试它的依赖性

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

  • 我们为whatToLoad传递正确的值
  • 我们是否正确存储/使用返回的值
  • 正确处理从Assembly.LoadFrom()引发的错误或异常
  • 如果测试可以提供模拟实现,那么最容易做到这一点。然后,我们可以通过检查Mock是否收到预期值来测试1。测试2通过返回定义良好的值(或对于多个测试,返回不同的有趣值)测试3通过生成选定的错误条件

    因此,您已将代码更改为以下内容:

      aMethod(loader, whatToLoad) {
              // other code
    
              x = loader.Load( whatToLoad );
    
              // code using x
      }
    
    也许加载的代码是以其他方式注入的,但关键是现在您可以指定不同的测试来设置合适的loaoder。例如,对于第一次测试

    testLoader = new MockLoaderThatRembers();
    
    tested.aMethod(testLoader, loadThis);
    
    assertEquals(testLoader.getLoader(), loadThis);
    
    因此,如果您正在做的就是这样的事情,那么是的,我会说您正在启用TDD。

    是这种情况吗

       aMethod(whatToLoad) {
              // other stuff
    
              x = Assembly.LoadFrom( whatToLoad );
    
              // code using x
      }
    
    第一个原则:我们将重点测试aMethod(),Assembly.LoadFrom()的测试是一个单独的问题。当我们为aMethod()构建测试时,我们不会尝试测试它的依赖性

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

  • 我们为whatToLoad传递正确的值
  • 我们是否正确存储/使用返回的值
  • 正确处理从Assembly.LoadFrom()引发的错误或异常
  • 如果测试可以提供模拟实现,那么最容易做到这一点。然后,我们可以通过检查Mock是否收到预期值来测试1。测试2通过返回定义良好的值(或对于多个测试,返回不同的有趣值)测试3通过生成选定的错误条件

    因此,您已将代码更改为以下内容:

      aMethod(loader, whatToLoad) {
              // other code
    
              x = loader.Load( whatToLoad );
    
              // code using x
      }
    
    也许加载的代码是以其他方式注入的,但关键是现在您可以指定不同的测试来设置合适的loaoder。例如,对于第一次测试

    testLoader = new MockLoaderThatRembers();
    
    tested.aMethod(testLoader, loadThis);
    
    assertEquals(testLoader.getLoader(), loadThis);
    
    因此,如果这是你正在做的事情,那么是的,我会说你正在启用TDD