gpt4 book ai didi

unit-testing - 重用具有多个实现的测试套件?

转载 作者:行者123 更新时间:2023-12-04 16:56:59 25 4
gpt4 key购买 nike

我正在使用 nUnit 进行测试。我有一套针对我的 IFoo 接口(interface)运行的测试;测试夹具设置确定要加载和测试哪个 IFoo 实现。

我试图弄清楚如何针对 IFoo 实现列表运行相同的套件,但是如果不手动修改设置,则看不到任何测试所有实现的方法。

有没有人解决过这个问题?

最佳答案

创建一个包含在 IFoo 实现之间共享的测试的基础测试类,如下所示:

// note the absence of the TestFixture attribute
public abstract class TestIFooBase
{
protected IFoo Foo { get; set; }

[SetUp]
public abstract void SetUp();

// all shared tests below

[Test]
public void ItWorks()
{
Assert.IsTrue(Foo.ItWorks());
}
}

现在为您要测试的每个实现创建一个非常小的派生类:
[TestFixture]
public class TestBarAsIFoo : TestIFooBase
{
public override void SetUp()
{
this.Foo = new Bar();
}
}

编辑 : 显然 NUnit 也支持 parameterized test fixtures ,甚至支持具有参数类型的通用测试夹具。链接文档中的示例:
[TestFixture(typeof(ArrayList))]
[TestFixture(typeof(List<int>))]
public class IList_Tests<TList> where TList : IList, new()
{
private IList list;

[SetUp]
public void CreateList()
{
this.list = new TList();
}

[Test]
public void CanAddToList()
{
list.Add(1); list.Add(2); list.Add(3);
Assert.AreEqual(3, list.Count);
}
}

这个例子有点简单,因为它有 new()类型的约束。但您也可以使用 Activator.CreateInstance并为您的 IFoo 传递构造函数参数来自 TestFixture 的实现属性。

关于unit-testing - 重用具有多个实现的测试套件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1495492/

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