首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NUnit:如何在多个对象上运行测试类--比TestCaseSourceAttribute更好的选择?

NUnit:如何在多个对象上运行测试类--比TestCaseSourceAttribute更好的选择?
EN

Stack Overflow用户
提问于 2016-05-23 05:52:12
回答 1查看 671关注 0票数 1

我想用相同的测试类测试接口的所有实现。我已经知道TestCaseSourceAttribute,所以我将其设置为从静态testObjects数组加载对象实例。这段代码按照我想要的方式工作:

代码语言:javascript
复制
[TestFixture]
public class MySerializerTests
{
    // IStreamSerializers loaded by the TestCaseSource attribute.
    static object[] testObjects = new object[]
    {
        new BinarySerializer(),
        new XmlSerializer(),
        new JsonSerializer()
    };

    [Test, TestCaseSource("testObjects")]
    public void Serialize_NullStreamArgument_ThrowsArgumentException(IStreamSerializer serializer)
    {
        Map map = new Map();
        Assert.Throws<ArgumentNullException>(() => serializer.Serialize(null, map));
    }
}

然而,我必须在每个方法上使用[TestCaseSource("testObjects")],这使得我拥有的方法数量相当繁琐。有没有一种方法可以将TextCaseSource属性替换为对整个测试类有效的属性?也许类似于参数化FestFixture的工作方式?

我想要类似这样的东西,但是我可以通过test类的构造函数来传递我测试的类的实例:

代码语言:javascript
复制
[TestFixture(0)]
[TestFixture(1)]
[TestFixture(2)]
public class MySerializerTests
{
    // IStreamSerializers loaded by the TestCaseSource attribute.
    static object[] testObjects = new object[]
    {
        new BinarySerializer(),
        new XmlSerializer(),
        new JsonSerializer()
    };

    int currentIndex;

    public MySerializerTests(int index)
    {
        currentIndex = 0;
    }

    [Test]
    public void Serialize_NullStreamArgument_ThrowsArgumentException()
    {
        Map map = new Map();

        Assert.Throws<ArgumentNullException>(() => testObjects[currentIndex].Serialize(null, map));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 02:23:57

你想要TestFixtureSourceAttribute。

代码语言:javascript
复制
[TestFixtureSource("testObjects")]
public class MySerializerTests
{
    // IStreamSerializers loaded by the TestCaseSource attribute.
    static IStreamSerializer[] testObjects = new IStreamSerializer[]
    {
        new BinarySerializer(),
        new XmlSerializer(),
        new JsonSerializer()
    };

    IStreamSerializer _serializer;

    public MySerializerTests(IStreamSerializer serializer)
    {
        _serializer = serializer;
    }

    [Test]
    public void Serialize_NullStreamArgument_ThrowsArgumentException()
    {
        Map map = new Map();
        Assert.Throws<ArgumentNullException>(
            () => _serializer.Serialize(null, map));
    }
}

我还没有编译这个,所以你可能需要修正打字错误,等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37380025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档