微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 如何在仅更改依赖项的同时运行相同的testmethods?

我有5个测试方法来测试PasswordManager对象的功能.我使用visual studio 2008的内置测试引擎.这个管理器可以使用两个依赖项: XMLStorageManager或DbStorageManager. Dependency在Passwordmanager的构造函数中设置.如何运行测试两次,唯一不同的是我使用的StorageManager类型?
(我知道,我知道,这些不是单元测试…)

解决方法

我不是MSTest用户,但你可能有一些选择.通常使用NUnit我会使用通用或参数化夹具,但我不确定MSTest是否具有类似功能.鉴于此,以下是我如何使用NUnit执行此操作,其形式应该可以通过 template method pattern使用任何单元测试框架重现.

脚步:

>使用定义抽象基类
其中的所有测试
>投入
抽象方法
返回的CreateStorageManager()
一个IStorageManager(或其他什么
接口这两个依赖项
实行)
>将夹具子类化两次
并提供一个实现
CreateStorageManager()返回您希望用于运行测试的具体类型.

这是等效NUnit版本的代码;我相信你可以推断出来.注意:MSTest的继承规则可能与我以前的略有不同.如果它不起作用,您可以尝试将基类标记为测试夹具.

public abstract class PasswordManagerFixtureBase
{
     protected abstract IStorageManager CreateStorageManager();

     // all tests go in this fixture
     [Test]
     public void SomeTestOrOther()
     { 
         var passwordManager = CreatePasswordManager();

         // do test logic

     }

     private PasswordManager CreatePasswordManager()
     { 
          // calls into subclass implementation to get instance of storage
          IStorageManager storage = CreateStorageManager();
          return new PasswordManager(storage);
     }   
}

// Runs the tests in the fixture base using XmlStorageManager
[TestFixture]
public class PasswordManager_XMLStorageManagerImpltests
{
      protected override IStorageManager CreateStorageManager()
      {
          return new XMLStorageManager();
      }
}

// Runs the tests in the fixture base using DbStorageManager
[TestFixture]
public class PasswordManager_DbStorageManagerImpltests
{
      protected override IStorageManager CreateStorageManager()
      {
          return new DbStorageManager();
      }
}

使用MSTest可能有更优雅的方法,但这应该有效.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐