gpt4 book ai didi

.net - 如何在仅更改依赖项的情况下运行相同的测试方法?

转载 作者:行者123 更新时间:2023-11-28 19:52:06 25 4
gpt4 key购买 nike

我有 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 可能有更优雅的方法来执行此操作,但这应该可行。

关于.net - 如何在仅更改依赖项的情况下运行相同的测试方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123599/

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